一.开发环境需求
操作系统:Windows 7,Windows 10,Windows 11。
开发环境工具:Cfree,Dev C++,VC6++。
开发语言:C语言。
二. 功能需求
- 制作一个学生信息管理系统。
- 在制作的系统中,能录入学生信息、删除学生信息、修改学生信息,查询学生信息、排序学生信息。
- 系统使用方法便捷,简单,功能容易实现。
- 学生的信息包括:学号、姓名、班级、性别、英语成绩,C语言成绩,平均成绩,总成绩
- 避免系统bug的出现,优化系统。
三.功能说明
录入学生信息:将学生的信息输入到学生信息管理系统中。
删除学生信息:将学生信息管理系统中不需要的学生信息删除。
修改学生信息:在学生信息管理系统中修改学生的部分信息。
查询学生信息:在学生信息管理系统中输入需求显示查询结果。
显示学生信息:在学生信息管理系统中按需求显示所有学生信息。
排序学生信息:按一定规律对学生信息进行排序。
显示最好成绩:显示所有学生中总成绩最高的同学。
分组统计成绩:按照总成绩进行分组统计。
清屏:清除以上操作结果。
四.构造算法框架
1.构造功能框架
此步是将系统主要功能的算法框架建立出来(只是框架,不需要实现功能)
2.设计系统目录
按照学生信息管理系统的功能进行设计,将学生信息管理系统的功能呈现出来,供用户选择。 - void menu()
- {
- printf("\n\n\n");
- printf("\t\t-------------------------------------------------\n");
- printf("\t\t|| ---------------- ||\n");
- printf("\t\t||**************学生信息管理系统***************||\n");
- printf("\t\t|| ---------------- ||\n");
- printf("\t\t|| ||\n");
- printf("\t\t||~~~~~~~~~~~~~~~1.录入学生信息~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~2.删除学生信息~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~3.修改学生信息~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~4.查询学生信息~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~5.显示学生信息~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~6.排序学生信息~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~7.显示最好成绩~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~8.分组统计成绩~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~9.清屏~~~~~~~~~~~~~~~~~~~~~~~~||\n");
- printf("\t\t|| ||\n");
- printf("\t\t||*********************************************||\n");
- }
复制代码
运行结果
五.在框架的基础上一一实现各项功能
1. 录入学生信息:将学生的信息输入到学生信息管理系统中,并保存到文件中。 - //录入学生信息
- void in()
- {
- void print();
- FILE *fp;
- int i, m=0;
- char ch[2];
- if((fp=fopen("stu.txt","rb"))==NULL)//文件不存在先使用wb创建文件,再将其改为rb;反之使用直接使用rb。
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }//m指代文件中学生的数量。
- fclose(fp);
- if(m==0)
- {
- printf("文件没有内容\n");
- }
- else
- {
- print();
- }
- if((fp=fopen("stu.txt","ab+"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- printf("输入学生信息(y/n);\n");
- scanf("%s",ch);
- while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
- {
- printf("number:\n");
- scanf("%3d",&stu[m].num);
- for(i=0;i<m;i++)
- {
- if(stu[i].num==stu[m].num)
- {
- printf("您的信息已存在\n");
- fclose(fp);
- getchar();
- return;
- }
- }
- printf("name:\n");
- scanf("%s",stu[m].name);
- printf("class:\n");
- scanf("%s",stu[m].clas);
- printf("sex:\n");
- scanf("%s",stu[i].sex);
- printf("Eng_score:\n");
- scanf("%f",&stu[m].Eng_score);
- printf("C_score:\n");
- scanf("%f",&stu[m].C_score);
- stu[i].total=stu[i].C_score+stu[i].Eng_score;
- stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
- if(fwrite(&stu[m],LEN,1,fp)!=1)//录入数据,并保存到文件中。
- {
- printf("不能保存\n");
- getchar();
- }
- else
- {
- printf("信息保存成功\n");
-
- m++;
- }
- printf("是否继续录入学生信息(y/n):");
- scanf("%s",ch);
- }
- fclose(fp);//注意,打开文件后,操作完成后,必须关闭文件
- }
复制代码
运行结果
2.删除学生信息:将学生信息管理系统中不需要的学生信息删除,在删除完成后需将学生人数进行减一。 - //删除学生信息
- void delet()
- {
- void print();
- FILE *fp;
- int num,m=0;
- int i,j;
- int flag=0;
- char ch[2];
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件中没有学生信息\n");
- }
- else
- {
- print();
- printf("请输入需要删除学生信息的学号:");
- scanf("%d",&num);
- }
- for(i=0;i<m;i++)
- {
- if(stu[i].num==num)
- {
- printf("该学生已找到,是否删除(y/n):");
- scanf("%s",ch);
- if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
- {
- for(j=i;j<m;j++)
- {
- stu[j]=stu[j+1];
- }
- m--;//删除该学生后,需要对学生人数减一
- flag=1;//标记已经进行了删除操作
- if((fp=fopen("stu.txt","wb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- for(j=0;j<m;j++)
- {
- if(fwrite(&stu[j],LEN,1,fp)!=1)
- {
- printf("不能保存\n");
- getchar();
- }
- }
- fclose(fp);
- printf("删除成功!\n");break;
-
- }
- else
- {
- printf("学生信息存在,不需要删除。");
- break;
- }
- }
-
- }
- if(m==i&&flag==0)
- {
- printf("未找到该学生");
- }
-
- }
复制代码
运行结果
3.修改学生信息:在学生信息管理系统中修改学生的部分信息。 - //修改学生信息
- void updet()
- {
- void print();
- int num;
- char name[10];
- char clas[20];
- char sex[5];
- float Eng_score;
- float C_score;
- FILE *fp;
- int m=0,a;
- int i,j;
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件中没有学生信息\n");
- }
- else
- {
- print();
- printf("请输入需要修改学生信息的学号:");
- scanf("%d",&num);
- }//通过学号找到需要修改信息的学生。
- for(i=0;i<m;i++)
- {
- if(num==stu[i].num)
- {
- printf("1:学号,2:姓名,3:班级,4:性别,5:英语成绩,6:C语言成绩\n");
- printf("该学生已被找到,请选择需要修改的内容(1-5):");
- scanf("%d",&a);
- while(a)
- {
- switch (a)
- {
-
- case 1:
- printf("将%d学生的学号修改为:",num);
- scanf("%d",&num);
- stu[i].num=num;
- for(j=i+1;j<m;j++)
- {
- if(stu[j].num==num)
- {
- printf("您修改的学号已存在\n");
- getchar();
- return;
- }
- }
- break;
- case 2:
- printf("将%d学生的姓名修改为:",num);
- scanf("%s",name);
- strcpy(stu[i].name,name);
- break;
- case 3:
- printf("将%d学生的班级修改为:",num);
- scanf("%s",clas);
- strcpy(stu[i].clas,clas);
- break;
- case 4:
- printf("将%d学生的性别修改为:",num);
- scanf("%s",sex);
- strcpy(stu[i].sex,sex);
- break;
- case 5:
- printf("将%d学生的英语成绩修改为:",num);
- scanf("%f",&Eng_score);
- stu[i].Eng_score=Eng_score;
- stu[i].total=stu[i].C_score+stu[i].Eng_score;
- stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
- break;
- case 6:
- printf("将%d学生的C语言成绩修改为:",num);
- scanf("%f",&C_score);
- stu[i].C_score=C_score;
- stu[i].total=stu[i].C_score+stu[i].Eng_score;
- stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
- break;
- default:
- printf("选择错误,请重新选择需要修改的内容:");
- scanf("%d",&a);
- break;
- }
-
- printf("请选择需要修改的内容(如果已修改完成请按0):");
- scanf("%d",&a);
- }
- if((fp=fopen("stu.txt","wb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- for(j=0;j<m;j++)
- {
- if(fwrite(&stu[j],LEN,1,fp)!=1)
- {
- printf("不能保存\n");
- getchar();
- }
- }
- fclose(fp);
- printf("修改成功!\n");
- break;
- }
- }
- if(m==i)
- {
- printf("未找到该学生\n");
- }
- }
复制代码
运行结果
4.查询学生信息:在学生信息管理系统中输入需求显示查询结果。 - //查询学生信息
- void select()
- {
- int num,m=0;
- int i;
- FILE *fp;
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件没有内容\n");
- return;
- }
- printf("请输入学生学号进行查询:");
- scanf("%d",&num);//通过输入学号进行查找。
- for(i=0;i<m;i++)
- {
- if(num==stu[i].num)
- {
- printf("\n");
- printf("该学生信息已被查到;\n");
- printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
- printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
- break;
- }
- }
- if(m==i)
- {
- printf("该学生信息不存在\n");
- return;
- }
- }
复制代码
运行结果
5.显示学生信息:在学生信息管理系统中按需求显示所有学生信息。 - //显示学生信息
- void print()
- {
- int i,m=0;
- FILE *fp;
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)//将文件中的学生信息读取出来,并按照定义的结构体数组呈现。
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件中没有内容\n");
- }
- printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
- for(i=0;i<m;i++)
- {
- printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
- }
- }
复制代码
运行结果
6.排序学生信息:按一定规律对学生信息进行排序。 - //排序
- void sort()
- {
- int i,j,m=0;
- int ch;
- FILE *fp;
- struct student temp;
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件中没有内容\n");
- }
- printf("1:学号升序,2:英语成绩升序,3:C语言升序,4:总成绩升序,5:平均成绩升序\n");
- printf("请选择显示形式:");
- scanf("%d",&ch);
- switch (ch)
- {
- case 1:
- for(i=0;i<m;i++)
- {
- for(j=i+1;j<m;j++)
- {
- if(stu[i].num>stu[j].num)
- {
- temp=stu[i];
- stu[i]=stu[j];
- stu[j]=temp;
- }
- }
- }
- break;
- case 2:
- for(i=0;i<m;i++)
- {
- for(j=i+1;j<m;j++)
- {
- if(stu[i].Eng_score>stu[j].Eng_score)
- {
- temp=stu[i];
- stu[i]=stu[j];
- stu[j]=temp;
- }
- }
- }
-
- break;
- case 3:
- for(i=0;i<m;i++)
- {
- for(j=i+1;j<m;j++)
- {
- if(stu[i].C_score>stu[j].C_score)
- {
- temp=stu[i];
- stu[i]=stu[j];
- stu[j]=temp;
- }
- }
- }
-
- break;
- case 4:
- for(i=0;i<m;i++)
- {
- for(j=i+1;j<m;j++)
- {
- if(stu[i].total>stu[j].total)
- {
- temp=stu[i];
- stu[i]=stu[j];
- stu[j]=temp;
- }
- }
- }
-
- break;
- case 5:
- for(i=0;i<m;i++)
- {
- for(j=i+1;j<m;j++)
- {
- if(stu[i].aver>stu[j].aver)
- {
- temp=stu[i];
- stu[i]=stu[j];
- stu[j]=temp;
- }
- }
- }
-
- break;
- }
- printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
- for(i=0;i<m;i++)
- {
- printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
- }
-
- }
复制代码
运行结果
7.显示最好成绩:显示所有学生中总成绩最高的同学。 - //最大值
- void max()
- {
- int i,j=0;
- FILE *fp;
- int m=0;
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件中没有内容\n");
- }
- for(i=0;i<m;i++)
- {
- if(stu[i].total>stu[j].total)
- j=i;
- }
- printf("总成绩成绩最高的同学是:\n");
- printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
- printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);
-
- }
复制代码
运行结果
8.分组统计成绩:按照总成绩进行分组统计。 - //分组统计
- void cut()
- {
- int i,j;
- float n;
- FILE *fp;
- int m=0;
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件中没有内容\n");
- }
- printf("请输入按总成绩分组的值:");
- scanf("%f",&n);
- printf("总成绩大于%.2f的同学有:\n",n);
- printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
- for(i=0;i<m;i++)
- {
- if(stu[i].total>=n)
- printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
- }
- printf("总成绩小于%.2f的同学有:\n",n);
- printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
- for(j=0;j<m;j++)
- {
- if(stu[j].total<n)
- printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);
- }
- }
复制代码
运行结果
9.清屏:清除以上操作结果。 - //清屏
- void clea()
- {
- system("cls");
- }
复制代码
六.源代码 - #include <stdio.h>
- #include<string.h>
- #include <stdlib.h>
- #define LEN sizeof(struct student)
- //学生信息结构体
- struct student
- {int num;
- char name[20];
- char clas[20];
- char sex[5];
- float Eng_score;
- float C_score;
- float total;
- float aver;
- };
- struct student stu[50];
- //系统操作
- int main()
- {
- void menu();
- void in();
- void delet();
- void updet();
- void select();
- void print();
- void sort();
- void max();
- void cut();
- void clea();
- menu();
- int n;
- printf("请选择功能(1-9):\n");
- scanf("%d",&n);
- while(n)
- {
- if(n>=1&&n<=9)
- {
- switch(n)
- {
- case 1:in();break;
- case 2:delet();break;
- case 3:updet();break;
- case 4:select();break;
- case 5:print();break;
- case 6:sort();break;
- case 7:max();break;
- case 8:cut();break;
- case 9:clea();break;
- }
- if(n==9)
- {
- menu();
- }
- printf("\n");
- printf("请选择功能(1-9):");
- scanf("%d",&n);
- }
-
- else
- {
- printf("\n");
- printf("请重新输入:");
- scanf("%d",&n);
- }
-
- }
-
- return 0;
- }
- //目录
- void menu()
- {
- printf("\n\n\n");
- printf("\t\t-------------------------------------------------\n");
- printf("\t\t|| ---------------- ||\n");
- printf("\t\t||**************学生信息管理系统***************||\n");
- printf("\t\t|| ---------------- ||\n");
- printf("\t\t|| ||\n");
- printf("\t\t||~~~~~~~~~~~~~~~1.录入学生信息~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~2.删除学生信息~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~3.修改学生信息~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~4.查询学生信息~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~5.显示学生信息~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~6.排序学生信息~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~7.显示最好成绩~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~8.分组统计成绩~~~~~~~~~~~~~~~~||\n");
- printf("\t\t||~~~~~~~~~~~~~~~9.清屏~~~~~~~~~~~~~~~~~~~~~~~~||\n");
- printf("\t\t|| ||\n");
- printf("\t\t||*********************************************||\n");
- }
- //录入学生信息
- void in()
- {
- void print();
- FILE *fp;
- int i, m=0;
- char ch[2];
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件没有内容\n");
- }
- else
- {
- print();
- }
- if((fp=fopen("stu.txt","ab+"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- printf("输入学生信息(y/n);\n");
- scanf("%s",ch);
- while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
- {
- printf("number:\n");
- scanf("%3d",&stu[m].num);
- for(i=0;i<m;i++)
- {
- if(stu[i].num==stu[m].num)
- {
- printf("您的信息已存在\n");
- fclose(fp);
- getchar();
- return;
- }
- }
- printf("name:\n");
- scanf("%s",stu[m].name);
- printf("class:\n");
- scanf("%s",stu[m].clas);
- printf("sex:\n");
- scanf("%s",stu[i].sex);
- printf("Eng_score:\n");
- scanf("%f",&stu[m].Eng_score);
- printf("C_score:\n");
- scanf("%f",&stu[m].C_score);
- stu[i].total=stu[i].C_score+stu[i].Eng_score;
- stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
- if(fwrite(&stu[m],LEN,1,fp)!=1)
- {
- printf("不能保存\n");
- getchar();
- }
- else
- {
- printf("信息保存成功\n");
-
- m++;
- }
- printf("是否继续录入学生信息(y/n):");
- scanf("%s",ch);
- }
- fclose(fp);
- }
- //删除学生信息
- void delet()
- {
- void print();
- FILE *fp;
- int num,m=0;
- int i,j;
- int flag=0;
- char ch[2];
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件中没有学生信息\n");
- }
- else
- {
- print();
- printf("请输入需要删除学生信息的学号:");
- scanf("%d",&num);
- }
- for(i=0;i<m;i++)
- {
- if(stu[i].num==num)
- {
- printf("该学生已找到,是否删除(y/n):");
- scanf("%s",ch);
- if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
- {
- for(j=i;j<m;j++)
- {
- stu[j]=stu[j+1];
- }
- m--;
- flag=1;
- if((fp=fopen("stu.txt","wb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- for(j=0;j<m;j++)
- {
- if(fwrite(&stu[j],LEN,1,fp)!=1)
- {
- printf("不能保存\n");
- getchar();
- }
- }
- fclose(fp);
- printf("删除成功!\n");break;
-
- }
- else
- {
- printf("学生信息存在,不需要删除。");
- break;
- }
- }
-
- }
- if(m==i&&flag==0)
- {
- printf("未找到该学生");
- }
-
- }
- //修改学生信息
- void updet()
- {
- void print();
- int num;
- char name[10];
- char clas[20];
- char sex[5];
- float Eng_score;
- float C_score;
- FILE *fp;
- int m=0,a;
- int i,j;
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件中没有学生信息\n");
- }
- else
- {
- print();
- printf("请输入需要修改学生信息的学号:");
- scanf("%d",&num);
- }
- for(i=0;i<m;i++)
- {
- if(num==stu[i].num)
- {
- printf("1:学号,2:姓名,3:班级,4:性别,5:英语成绩,6:C语言成绩\n");
- printf("该学生已被找到,请选择需要修改的内容(1-5):");
- scanf("%d",&a);
- while(a)
- {
- switch (a)
- {
-
- case 1:
- printf("将%d学生的学号修改为:",num);
- scanf("%d",&num);
- stu[i].num=num;
- for(j=i+1;j<m;j++)
- {
- if(stu[j].num==num)
- {
- printf("您修改的学号已存在\n");
- getchar();
- return;
- }
- }
- break;
- case 2:
- printf("将%d学生的姓名修改为:",num);
- scanf("%s",name);
- strcpy(stu[i].name,name);
- break;
- case 3:
- printf("将%d学生的班级修改为:",num);
- scanf("%s",clas);
- strcpy(stu[i].clas,clas);
- break;
- case 4:
- printf("将%d学生的性别修改为:",num);
- scanf("%s",sex);
- strcpy(stu[i].sex,sex);
- break;
- case 5:
- printf("将%d学生的英语成绩修改为:",num);
- scanf("%f",&Eng_score);
- stu[i].Eng_score=Eng_score;
- stu[i].total=stu[i].C_score+stu[i].Eng_score;
- stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
- break;
- case 6:
- printf("将%d学生的C语言成绩修改为:",num);
- scanf("%f",&C_score);
- stu[i].C_score=C_score;
- stu[i].total=stu[i].C_score+stu[i].Eng_score;
- stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
- break;
- default:
- printf("选择错误,请重新选择需要修改的内容:");
- scanf("%d",&a);
- break;
- }
-
- printf("请选择需要修改的内容(如果已修改完成请按0):");
- scanf("%d",&a);
- }
- if((fp=fopen("stu.txt","wb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- for(j=0;j<m;j++)
- {
- if(fwrite(&stu[j],LEN,1,fp)!=1)
- {
- printf("不能保存\n");
- getchar();
- }
- }
- fclose(fp);
- printf("修改成功!\n");
- break;
- }
- }
- if(m==i)
- {
- printf("未找到该学生\n");
- }
- }
- //查询学生信息
- void select()
- {
- int num,m=0;
- int i;
- FILE *fp;
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件没有内容\n");
- return;
- }
- printf("请输入学生学号进行查询:");
- scanf("%d",&num);
- for(i=0;i<m;i++)
- {
- if(num==stu[i].num)
- {
- printf("\n");
- printf("该学生信息已被查到;\n");
- printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
- printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
- break;
- }
- }
- if(m==i)
- {
- printf("该学生信息不存在\n");
- return;
- }
- }
- //显示学生信息
- void print()
- {
- int i,m=0;
- FILE *fp;
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件中没有内容\n");
- }
- printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
- for(i=0;i<m;i++)
- {
- printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
- }
- }
- //排序
- void sort()
- {
- int i,j,m=0;
- int ch;
- FILE *fp;
- struct student temp;
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件中没有内容\n");
- }
- printf("1:学号升序,2:英语成绩升序,3:C语言升序,4:总成绩升序,5:平均成绩升序\n");
- printf("请选择显示形式:");
- scanf("%d",&ch);
- switch (ch)
- {
- case 1:
- for(i=0;i<m;i++)
- {
- for(j=i+1;j<m;j++)
- {
- if(stu[i].num>stu[j].num)
- {
- temp=stu[i];
- stu[i]=stu[j];
- stu[j]=temp;
- }
- }
- }
- break;
- case 2:
- for(i=0;i<m;i++)
- {
- for(j=i+1;j<m;j++)
- {
- if(stu[i].Eng_score>stu[j].Eng_score)
- {
- temp=stu[i];
- stu[i]=stu[j];
- stu[j]=temp;
- }
- }
- }
-
- break;
- case 3:
- for(i=0;i<m;i++)
- {
- for(j=i+1;j<m;j++)
- {
- if(stu[i].C_score>stu[j].C_score)
- {
- temp=stu[i];
- stu[i]=stu[j];
- stu[j]=temp;
- }
- }
- }
-
- break;
- case 4:
- for(i=0;i<m;i++)
- {
- for(j=i+1;j<m;j++)
- {
- if(stu[i].total>stu[j].total)
- {
- temp=stu[i];
- stu[i]=stu[j];
- stu[j]=temp;
- }
- }
- }
-
- break;
- case 5:
- for(i=0;i<m;i++)
- {
- for(j=i+1;j<m;j++)
- {
- if(stu[i].aver>stu[j].aver)
- {
- temp=stu[i];
- stu[i]=stu[j];
- stu[j]=temp;
- }
- }
- }
-
- break;
- }
- printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
- for(i=0;i<m;i++)
- {
- printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
- }
-
- }
- //最大值
- void max()
- {
- int i,j=0;
- FILE *fp;
- int m=0;
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件中没有内容\n");
- }
- for(i=0;i<m;i++)
- {
- if(stu[i].total>stu[j].total)
- j=i;
- }
- printf("总成绩成绩最高的同学是:\n");
- printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
- printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);
-
- }
- //分组统计
- void cut()
- {
- int i,j;
- float n;
- FILE *fp;
- int m=0;
- if((fp=fopen("stu.txt","rb"))==NULL)
- {
- printf("文件打开失败\n");
- return;
- }
- while(!feof(fp))
- {
- if(fread(&stu[m],LEN,1,fp)==1)
- {
- m++;
- }
- }
- fclose(fp);
- if(m==0)
- {
- printf("文件中没有内容\n");
- }
- printf("请输入按总成绩分组的值:");
- scanf("%f",&n);
- printf("总成绩大于%.2f的同学有:\n",n);
- printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
- for(i=0;i<m;i++)
- {
- if(stu[i].total>=n)
- printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
- }
- printf("总成绩小于%.2f的同学有:\n",n);
- printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
- for(j=0;j<m;j++)
- {
- if(stu[j].total<n)
- printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);
- }
- }
- //清屏
- void clea()
- {
- system("cls");
- }
复制代码
七.总结
以上就是使用C语言编写的学生信息管理系统,在制作系统的过程中也遇到过很多的问题。
可能在第一次制作系统的时候,很可能是没有头绪的,这个时候我们不要放弃,开始没有头绪是正常的,此时我们应该静下心来去分析系统的功能,将思路打开,画出流程图,将系统的基本框架算法编译出来,然后逐个功能去分析去实现,大胆的将自己想到的算法编译出来,然后再逐个优化,最后一定能制作出一个非常好的系统。
在制作学生管理系统时,各项功能的实现一定要在心中有一个大概的流程,然后再使用C语言进行编译,在进行文件的的读和写操作后都要记得关闭文件,要理解各种函数的作用和意义,这样帮助我们更好的制作出想要的系统。 |