/*学生成绩管理系统
数据库的数据项主要数据包括:学号、姓名、年级、专业、成绩1、成绩2、成绩3、平均成绩、总成绩。
要求具有以下功能:
(1)添加、删除任意个记录。
(2)修改任意个记录。
(3)显示、保存记录。
(4)排序功能:打开学生数据库,计算每个学生的平均成绩和总成绩,用冒泡法或选择排序法将平均成绩和总成绩排序后生成两个新文件(从大到小),
存盘并显示这两个文件的全部记录。
(5)查询功能:打开总成绩排序文件,用折半查找法统计出给定分数的人数并显示。
要求:
(1)设计一个主函数和多个子函数,每个子函数完成一个相对独立的子功能。
(2)程序运行时,首先进行口令检查,再显示菜单。并能根据菜单调用相应的函数功能。
口令程序段的功能要求:
《1》提示用户输入一个口令。
《2》用户输入口令后,若口令对,则提示用户通过,可执行后续程序;否则不通过。
《3》可对用户的口令输入进行次数限制(如:重复输入3次都不对),则自动退出系统。*/
#include
#include
#include
struct student
{
int num;
char name[10];
int grade;
char major[10];
float score_1,score_2,score_3,aver,total;
struct student *next;
};
struct student *creat(void);
struct student *add(void);
struct student *del(int num);
struct student *alter();
void save(struct student *head);
void read();
void totalsort(struct student *head);
void aversort(struct student *head);
void Bfindsort();
int all=0;
void main()
{
int i,n,m,num;
char ord[10]="student",ord_1[10];
struct student *p;
for(i=0;i<=3;i++)
{
if(i==3)
exit(0);
printf("请第%d次输入进入系统的指令:",i+1);
scanf("%s",ord_1);
if(strcmp(ord,ord_1)!=0)
printf("输入的指令有误请重新输入。\n");
if(strcmp(ord,ord_1)==0)
break;
}
p=NULL;
loop_2:printf("输入系统的功能:\n0、建立一个数据库;\n1、添加与保存学生数据;\n2、删除与保存学生数据;\n3、修改与保存学生数据;\n4、显示数据库的记录;\n5、将数据进行排序;\n6、查询指定成绩的人数:");
loop: scanf("%d",&n);
if(n<0||n>6)
{
printf("\n输入的选择有误请重新输入:");
goto loop;
}
if(n==2)
{
printf("输入删除学生数据的学号:");
scanf("%d",&num);
}
switch(n)
{
case 0:p=creat();save(p);read();break;
case 1:p=add();save(p);read();break;
case 2:p=del(num);save(p);read();break;
case 3:p=alter();save(p);read();break;
case 4:read();break;
case 5:
{
printf("输入选择排序的功能1、根据平均成绩;2、根据总成绩:");
loop_1: scanf("%d",&m);
if(m<1||m>2)
{
printf("\n输入的选择有误请重新输入:");
goto loop_1;
}
switch(m)
{
case 1:aversort(p);break;
case 2:totalsort(p);break;
}
}break;
case 6:Bfindsort()