⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 savethemark.txt

📁 本软件作为成绩记录的模拟软件
💻 TXT
字号:
/* Note:Your choice is C IDE */
#include "stdio.h"
#include <stdlib.h>
#include <string.h>
#define MAX 11
#define NUM 10000
#define FILENAME "record.dat"
typedef int COUNT;
typedef struct
{
	char id[MAX];
	char name[MAX*3];
	char mark[MAX];
}STUT_INFO;
void scan_valid(char *p,int n)
{	
	for(;;)
	{
		scanf("%s",p);
		if(*(p+1)||*p<49||*p>48+n)
		printf("请输入一个1到%d之间的数字\n",n);
		else break;
	}
}
char enter[11];
int main()
{
    STUT_INFO student,*pstu;
    void print_welcome();
    void scan_valid(char *,int);
    void add(STUT_INFO *);
    void find(STUT_INFO *);
    void deletes(STUT_INFO *);
    void modify(STUT_INFO *);
    void print();
    void printall(STUT_INFO *);
    pstu=&student;
    b:
    print_welcome();
    scan_valid(enter,7);
    switch(enter[0])
    {
    	case '1': add(pstu);break;
    	case '2': find(pstu);break;
    	case '3': deletes(pstu);break;
	    case '4': modify(pstu);break;
        case '5': print();break;
	    case '6': printall(pstu);
                  
                  break;
	    case '7':exit(0);
    }  
    printf("1.返回主界面\n2.退出\n");
                  scan_valid(enter,2);
                  if(enter[0]=='1')goto b;
    return 0;  
}

void print_welcome()
{	
	printf("\n\n\n你想要........\n");
	printf("1.添加新的学生成绩记录\n");
	printf("2.查找指定学生\n");
	printf("3.删除学生成绩记录\n");
	printf("4.修改记录信息\n");
	printf("5.输出各分数段学生记录\n");
	printf("6.输出全部学生成绩\n");
	printf("7.退出\n");
}
void add(STUT_INFO *p)
{
	float fmark;
	COUNT i,j,m;
	FILE *pf;
	  if((pf=fopen(FILENAME,"a"))==NULL)	
	  {
	  	printf("cannot open this file\n");
	  	exit(0);
	  }
	a:
	printf("请输入这个学生的姓名:\t");
	scanf("%s",p->name);
	printf("请输入这个学生的学号:\t");
	scanf("%s",p->id);
	b:
    	printf("请输入这个学生的成绩:\t");
	scanf("%s",p->mark);
	for(i=0,j=0;p->mark[i];i++)
	{
		if(p->mark[i]=='.'){j++;m=i;}	
		else if(p->mark[i]<'0'||p->mark[i]>'9')
		{
            printf("\n您输入了非数字\n");
			printf("1.重新输入\n2.退出输入\n");
			scan_valid(enter,2);
			if(enter[0]=='1')goto b;
			else exit(0);
        }
	}
	if(j>1)
	{
		printf("输入小数点过多\n");
		printf("1.重新输入\n2.退出输入\n");
		scan_valid(enter,2);
		if(enter[0]=='1')goto b;
        else exit(0);	
	}
	else fmark=atof(p->mark);
	if(fmark>100)
	{
        printf("\n输入的分数过大(成绩应在一百以内)\n");
	    printf("1.重新输入\n2.退出输入\n");
		scan_valid(enter,2);
		if(enter[0]=='1')goto b;
        else exit(0);             
    }
	else
    for(;j;)
	{	
		if(p->mark[m+2])
		{	printf("您输入的分数小数点后位数较多,是否重新输入?\n");
			printf("1.重新输入\n2.就是这个分数,没错!\n");
            scan_valid(enter,2);
            if(enter[0]=='1')goto b;
            else break;	
		}
        else break;	
	}	
	printf("学号: %s  姓名: %s  成绩:%s\n",p->id,p->name,p->mark);
	printf("1.确认储存\n2.输入有错要重新输入\n");
	scan_valid(enter,2);
	if(enter[0]=='2')goto a;
	fwrite(p,sizeof(STUT_INFO),1,pf);
	printf("输入成功!\n学号:%s\t姓名:%s\t成绩:%s",p->id,p->name,p->mark);
	printf("\n\n1.继续输入\n2.退出\n");
	scan_valid(enter,2);
	if(enter[0]=='1')goto a;
	fclose(pf);
}
void find(STUT_INFO *p)
{
	char id[MAX],name[MAX*3];
	int TorF=1;
	FILE *pf;
	if((pf=fopen(FILENAME,"r"))==NULL)	
	{	
	  	printf("cannot open this file\n");
	  	exit(0);
	}
	a:
	printf("1.通过学号查找学生\n2.通过姓名查找学生\n");
	scan_valid(enter,2);
	if(enter[0]=='1')
	{
		TorF=1;
		printf("请输入要查找的学生的学号:");
		scanf("%s",id);
		rewind(pf);
		for(;!feof(pf);)
		{
			fread(p,sizeof(STUT_INFO),1,pf);
			if(!strcmp(id,p->id))
			{
				TorF=0;
				printf("名字:%s  学号:%s  分数:%s",p->name,p->id,p->mark);
				break;
			}			
		}
		if(TorF)
		{
			printf("没有这个学号\n");
			printf("1.退出\n2.重新输入");
			scan_valid(enter,2);
			if(enter[0]=='2')goto a;
		}		
	}
	if(enter[0]=='2')
	{
		TorF=1;
		printf("请输入要查找的学生的姓名:");
		scanf("%s",name);
		rewind(pf);
		for(;!feof(pf);)
		{
			fread(p,sizeof(STUT_INFO),1,pf);
			if(!strcmp(name,p->name))
			{
				TorF=0;
				printf("名字:%s  学号:%s  分数:%s",p->name,p->id,p->mark);
				break;
			}			
		}
		if(TorF)
		{
			printf("没有这个学生\n");
			printf("1.退出\n2.重新输入");
			scan_valid(enter,2);
			if(enter[0]=='2')goto a;
		}		
	}
	printf("\n1.继续查找\n2.退出\n");
	scan_valid(enter,2);
	if(enter[0]=='1')goto a;
	fclose(pf);
}
void modify(STUT_INFO *p)
{
	char idname[3*MAX];
	FILE *pf;
	int TorF=1;
	a:
	printf("请输入要修改学生的姓名或学号(程序将自动识别)\n");
	scanf("%s",idname);
	if((pf=fopen(FILENAME,"r+"))==NULL)	
	{	
		printf("cannot open this file\n");
	  	exit(0);
	}
	rewind(pf);
	for(;!feof(pf);)
	{
		fread(p,sizeof(STUT_INFO),1,pf);
		if(!strcmp(idname,p->name)||!strcmp(idname,p->id))
		{
			TorF=0;
			printf("这个学生的信息为\n学号:%s 姓名:%s 成绩:%s\n",p->id,p->name,p->mark);
			break;
		}		
	}
	if(TorF)
	{
		printf("没有这个学生,请重新输入\n");
		printf("1.退出\n2.重新输入");
		scan_valid(enter,2);
		if(enter[0]=='2')goto a;
		else exit(0);
	}
	printf("\n你想要修改....\n1.学号\n2.姓名\n3.成绩\n4.不用修改\n");
	for(;;)
	{
		scan_valid(enter,4);	
		switch(enter[0])
		{
			case '1':printf("新学号为:");scanf("%s",p->id);break;
			case '2':printf("新姓名为:");scanf("%s",p->name);break;
			case '3':printf("新成绩为");scanf("%s",p->mark);break;
			default:printf("\n1.修改另外一个学生的信息\n2.退出\n3.储存并退出");
				scan_valid(enter,3);
				if(enter[0]=='1')goto a;
				else if(enter[0]=='3')
				{
					fseek(pf,-sizeof(STUT_INFO),1);
					fwrite(p,sizeof(STUT_INFO),1,pf);
					printf("已成功储存");
					fclose(pf);
					exit(0);
				}
				else exit(0);
		}
		printf("现在这个学生的信息为\n学号:%s 姓名:%s 成绩:%s\n",p->id,p->name,p->mark);
		printf("继续修改....\n1.学号\n2.姓名\n3.成绩\n4.不用修改");		
	}	
}
void deletes(STUT_INFO *p)
{

	FILE *pf;
	char idname[3*MAX];
	STUT_INFO stu[NUM];
	int TorF;
	COUNT n,m;
	a:
	if((pf=fopen(FILENAME,"r"))==NULL)	
	{	
		printf("cannot open this file\n");
	  	exit(0);
	}	
	printf("请输入要删除的学生的姓名或学号(程序将自动识别)\n");
	scanf("%s",idname);
	rewind(pf);
	for(TorF=1;!feof(pf);)
	{
		fread(p,sizeof(STUT_INFO),1,pf);
		if(!strcmp(idname,p->name)||!strcmp(idname,p->id))
		{
			TorF=0;
			printf("这个学生的信息为\n学号:%s 姓名:%s 成绩:%s\n",p->id,p->name,p->mark);
			break;
		}		
	}
	if(TorF)
	{
		printf("没有这个学生,请重新输入\n");
		printf("1.退出\n2.重新输入\n");
		scan_valid(enter,2);
		if(enter[0]=='2')goto a;
		else exit(0);
	}
	printf("\n确认要删除吗?....\n1.删除\n2.不用删除,退出\n3.返回");
	scan_valid(enter,3);
	switch(enter[0])
	{
	case '1':rewind(pf);
			 for(n=0;!feof(pf);n++)
			 {
			 	if((fread(&stu[n],sizeof(STUT_INFO),1,pf))!=1)break;
	 	  		if(!strcmp(idname,stu[n].id)||!strcmp(idname,stu[n].name)){n--;continue;}
		 	 }
			 pf=fopen(FILENAME,"w");
			 for(m=0;m<n;m++)
			 {
			 	if((fwrite(&stu[m],sizeof(STUT_INFO),1,pf))!=1)break;
			 	
			 }
			 printf("删除成功!\n1.继续删除\n2.退出");
			 fclose(pf);
			 scan_valid(enter,2);
			 if(enter[0]=='1')goto a;	 	     
	 	     break;
	case '2':exit(0);
	case '3':goto a;
	}
}
void print()
{
STUT_INFO stu[NUM];
	STUT_INFO *pstu[5][NUM],*temp;
	FILE *pf;
	float fmark[5][NUM],ftemp;
	COUNT n[5],m,x,y;
	int mark,i,j;
	if((pf=fopen(FILENAME,"r"))==NULL)	
	{	
	  	printf("cannot open this file\n");
	  	exit(0);
	}
	for(m=n[0]=n[1]=n[2]=n[3]=n[4]=0;!feof(pf);m++)
	{
		fread(&stu[m],sizeof(STUT_INFO),1,pf);
		mark=atoi(stu[m].mark)/10;		
		if(mark==10)mark=9;
		j=mark-5;
		if(j<1)
		{
			pstu[0][n[0]]=&stu[m];
			fmark[0][n[0]]=atof(stu[m].mark);
			n[0]++;
		}
		else 
		{
			pstu[j][n[j]]=&stu[m];
			fmark[j][n[j]]=atof(stu[m].mark);
			n[j]++;
		}
	}
	a:
	printf("\n1.输出60分以下学生\n");
	printf("2.输出60~69分数学生\n");
	printf("3.输出70~79分数学生\n");
	printf("4.输出80~89分数学生\n");
	printf("5.输出90分以上学生\n");
	printf("6.退出\n");
	scan_valid(enter,6);
	if(enter[0]=='6')exit(0);
	m=atoi(enter);
		m=m-1;
	mark=atoi(enter)-1;
	printf("学号\t\t姓名\t\t成绩\n");
	for(i=0;pstu[mark][i+1];i++)
	printf("%-16s%-16s%-16s\n",pstu[mark][i]->id,pstu[mark][i]->name,pstu[mark][i]->mark);
 	printf("1.按分数排列\n2.返回\n3.退出\n");
	scan_valid(enter,3);
	if(enter[0]=='2')goto a;
	else if(enter[0]=='1')
	{		
		for(y=0;y<i-1;y++)
		for(x=0;x<i-y-1;x++)
		if(fmark[m][x]<fmark[m][x+1])
		{
			temp=pstu[m][x];
			pstu[m][x]=pstu[m][x+1];
			pstu[m][x+1]=temp;
			ftemp=fmark[m][x];
			fmark[m][x]=fmark[m][x+1];
			fmark[m][x+1]=ftemp;
		}		
		for(j=0;pstu[m][j+1];j++)		
		printf("%-16s%-16s%-16s\t\n",pstu[m][j]->id,pstu[m][j]->name,pstu[m][j]->mark);
	}
	else exit(0);
}
void printall(STUT_INFO *p)
{
  FILE *pf;
  pf=fopen(FILENAME,"r");
  printf("学号\t\t姓名\t\t成绩\n");
  for(;!feof(pf);)
  {
  	if((fread(p,sizeof(STUT_INFO),1,pf))!=1)break;  	
  	printf("%-16s%-16s%-16s\n",p->id,p->name,p->mark);
  }  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -