📄 ok2.txt
字号:
#include<stdio.h>
#include<conio.h>
#define PAUSE printf("\n 按任意键继续...");getch();
#define len sizeof(struct student)
#define null 0
struct student
{double num;
char name[10];
int class;
float score[5];
struct student *next;
};
struct student *head=null;
struct student *p1,*p2;
int n=0; /*n为结点个数*/
char *subject[]={"英语","高等数学","C语言","物理","法律"}; /*定义成绩科目*/
main() /*主函数*/
{float temp;
char menu;
menu='1';
textbackground(1);
textcolor(10);
while(menu!='0')
{clrscr();
printf("\n\n\n\n\n\n");
printf(" 学生成绩管理系统\n");
printf(" *******^_^******************^_^*******\n");
printf(" 1.创建新的成绩记录.\n");
printf(" 2.查询已有的记录.\n");
printf(" 3.修改成绩记录.\n");
printf(" 4.导入已存在的记录.\n");
printf(" 5.统计所有记录.\n");
printf(" 6.列出所有记录.\n");
printf(" 0.退出.\n");
printf(" *******^_^******************^_^*******\n");
printf(" 请选择按键(0-6)操作:");
scanf(" %c",&menu);
switch(menu)
{case '1':input();break;
case '2':search();break;
case '3':modify();break;
case '4':load();break;
case '5':gather();break;
case '6':show_all();break;
case '0':menu='0';break;
default:printf("\n 输入超出范围,请键入0-6.\n\n");
PAUSE;
}
}
}
search()
{char menu_4='1';
while(menu_4!='0')
{clrscr();
printf("\n\n\n\n\n\n");
printf(" 查询成绩\n");
printf(" ***********************************************\n");
printf(" 1.按学号查询.\n");
printf(" 2.按姓名查询.\n");
printf(" 3.按班级查询.\n");
printf(" 4.按课程查询.\n");
printf(" 0.退回主菜单.\n");
printf(" ***********************************************\n");
printf(" 请选择按键(0-4)操作:");
scanf(" %c",&menu_4);
switch(menu_4)
{case '1':search_num();break;
case '2':search_nam();break;
case '3':search_class();break;
case '4':search_subj();break;
case '0':menu_4='0';break;
default :printf("\n 输入超出范围,请键入0-4!\n\n");}
if(menu_4!='0') {PAUSE;}
}
}
search_num()
{int i,t,class,flag,k;
double num;
char name[10];
printf("请输入学号:");
scanf("%lf",&num);
headline();
p1=head;flag=0;
while(p1!=null)
{if(p1->num==num)
{flag=1;
printf(" %-15.0lf%-3d %-10s",p1->num,p1->class,p1->name);
for(t=0;t<5;t++)
printf("%4.1f ",p1->score[t]);
printf("\n");}
p1=p1->next;}
if(flag==0) printf("对不起!不能找到该记录.\n");
return;}
search_nam()
{int i,t,class,flag,k;
double num;
char name[10];
printf("请输入姓名:");
scanf("%s",name);
headline();
p1=head;flag=0;
while(p1!=null)
{if(strcmp(p1->name,name)==0)
{flag=1;
printf(" %-15.0lf%-3d %-10s",p1->num,p1->class,p1->name);
for(t=0;t<5;t++)
printf("%4.1f ",p1->score[t]);
printf("\n");}
p1=p1->next;}
printf("\n");
if(flag==0) printf(" 对不起!不能找到该记录.\n");
return;}
search_class()
{int i,t,class,flag,k;
double num;
char name[10];
printf("请输入班级名称:");
scanf("%d",&class);
headline();
p1=head;flag=0;k=0;
while(p1!=null)
{if(p1->class==class)
{flag=1;k++;
printf(" %-15.0lf%-3d %-10s",p1->num,p1->class,p1->name);
for(t=0;t<5;t++)
printf("%4.1f ",p1->score[t]);
printf("\n");
}
p1=p1->next;}
printf("\n");
if(flag==0) printf(" 对不起!不能找到该记录.\n");
return;}
search_subj()
{int i,t,k;
for(t=0;t<5;t++) /*按科目查找*/
printf("\n %d : %s",t,subject[t]);
printf("\n请输入该课程:");
scanf("%d",&i);
if(i<=4&&i>=0)
{headline();
p1=head;k=0;
while(p1!=null)
{k++;
printf(" %-15.0lf%-3d %-10s",p1->num,p1->class,p1->name);
for(t=0;t<9*i;t++) printf(" ");
printf("%5.1f\n",p1->score[i]);
if(k%20==0) {printf(" 按任意键继续...\n"); getch();}/*若记录超过一个屏幕,则暂停显示*/
p1=p1->next;}
printf("\n");}
else printf("错误!\n");}
input() /*输入函数*/
{float temp;
int i,flag,x;char t,x1;
struct student *p3;
if(head!=null)
{printf(" 检查系统中是否有记录\n");/*检查内存中是否有数据*/
printf(" 1 - 创建新记录.\n 2 - 继续编辑该记录.\n 0 - 退出.\n");
printf(" 请选择按键(0-2)操作:");
scanf("%d",&x); /*询问若内存中有数据如何处理*/
if(x==1)/*创建新数据库*/
{printf("\n 警告! 如果存入,原有记录将被代替.\n" );
printf("\n继续吗?(y/n)");
scanf(" %c",&x1);
if(x1=='Y'||x1=='y')
{head=null;n=0;
p1=p2=(struct student*)malloc(len);}
else return; }
else if(x==2)/*继续往已有的记录中添加数据*/
{p2=head;
while((p2->next)!=null)
p2=p2->next;
p1=(struct student*)malloc(len);}
else if(x!=1||x!=2) return;/*如果没有选择1或2则退出函数*/
}
else p1=p2=(struct student*)malloc(len);
printf("\n (Num=0 Exit)\n");
printf("学号:"); /*输入学号*/
scanf("%lf",&p1->num);
while(p1->num!=null)
{for(flag=0,p3=head,i=0;i<n;i++)
{ if(p1->num==p3->num) /*判断输入的学号是否已经存在*/
{printf("对不起,该记录已存在.\n");
free(p1); /*如已经存在,则释放已建立的无用空间*/
flag=1; } /*若存在则标记为1*/
p3=p3->next;
}
if(flag!=1) /*如果无重复学号则继续*/
{ printf("姓名:"); /*输入姓名*/
scanf("%s",&p1->name);
printf("班级:");
scanf("%d",&p1->class); /*输入班级*/
for(i=0;i<=4;i++)
{printf("%s:",subject[i]);
scanf("%f",&temp); /*输入成绩*/
p1->score[i]=temp;}
n++;
if(n==1) head=p1;
else p2->next=p1;
p2=p1; }
p1=(struct student*) malloc(len);
printf("\n学号:");
scanf("%lf",&p1->num);
}
p2->next=null;
save();
return;
}
modify() /*修改输入*/
{char menu_2='1';
while(menu_2!='0')
{clrscr();
printf("\n\n\n\n\n\n");
printf(" 修改记录\n");
printf(" ************************************\n");
printf(" 1.删去原有记录.\n");
printf(" 2.插入记录.\n");
printf(" 3.修改记录.\n");
printf(" 0.回到主菜单.\n");
printf(" ************************************\n");
printf(" 请选择按键(0-3)操作:");
scanf(" %c",&menu_2);
switch(menu_2)
{case '1':delete();break;
case '2':insert();break;
case '3':modify_1();break;
case '0':menu_2='0';break;
default :printf("\n 输入超出范围,请键入0-3.\n\n");
}
}
}
delete() /*删除记录*/
{int t=n;
double num;
printf("输入你要删的学号:");
scanf("%lf",&num);
p1=head;
if(num==p1->num)
{head=head->next;free(p1);n--;}
else
while(p1!=null)
{if((p1->next)->num==num)
{p2=p1->next;p1->next=(p1->next)->next;
free(p2);n--;break;}
p1=p1->next;}
if(t==n) {printf("不能找到该学号!\n\n");
PAUSE;return;}/*根据n是否改变判断是否删除成功*/
else {printf("删除 Ok!!!\n\n");save();}
}
insert() /*插入函数*/
{int i,j,t,flag=0;struct student *p3;
float temp;
printf("Input i(1-%d):",n);
scanf("%d",&i);
if((i<1)||(i>n))
{printf("错误!\n 按任意键继续...");getche();}
else
{p2=(struct student*)malloc(len);
printf("Num:"); scanf("%lf",&p2->num);
if(p2->num==0) {printf(" 对不起,学号不能为0 !\n");getch();free(p2);return;} /*判断插入的学号是否为零*/
for(flag=0,p3=head,t=0;t<n;t++)
{if(p2->num==p3->num) /*判断输入的学号是否已经存在*/
{printf("对不起,该记录已存在!\n");
free(p2); /*如已经存在,则释放已建立的无用空间*/
flag=1;
PAUSE;
break;}
p3=p3->next;}
if(flag!=1) /*如果符合插入条件则插入记录*/
{printf("姓名:"); scanf("%s",&p2->name);
printf("班级:");scanf("%d",&p2->class);
for(t=0;t<=4;t++)
{printf("%s:",subject[t]);
scanf("%f",&temp);
p2->score[t]=temp;}
if(i==1)
{p2->next=head;head=p2;printf("\n插入 Ok!\n");n++;save();}
else
{i--;j=1;p1=head;
while(j<i)
{p1=p1->next;j++;}
p2->next=p1->next;
p1->next=p2;
printf("\n插入 Ok!\n");n++;save();}
}
}
}
modify_1() /*修改记录*/
{double num;int t,flag=0;float temp;
printf("请输入学号:");
scanf("%lf",&num);
p1=head;
while(p1!=null)
{if(p1->num==num)
{flag=1; /*设定修改标志*/
printf("姓名:"); scanf("%s",&p1->name);
printf("班级:");scanf("%d",&p1->class);
for(t=0;t<=4;t++)
{printf("%s:",subject[t]);
scanf("%f",&temp);
p1->score[t]=temp;}
}
p1=p1->next;
}
if(flag==1) {printf("\n修改OK!!\n");save();} /*根据修改标志flag判断是否找到记录*/
else {printf("\n不能找到该记录!\n");
PAUSE;}
}
gather()
{char menu_3='1';
while(menu_3!='0')
{clrscr();
printf("\n\n\n\n\n\n");
printf(" 成绩总汇\n");
printf(" ************************************\n");
printf(" 1.个人总成绩.\n");
printf(" 2.班级总成绩.\n");
printf(" 3.年级总成绩.\n");
printf(" 0.回到主菜单.\n");
printf(" ************************************\n");
printf(" 请选择按键(0-3)操作:");
scanf(" %c",&menu_3);
switch(menu_3)
{case '1':gather_per();break;
case '2':gather_class();break;
case '3':gather_grade();break;
case '0':menu_3='0';break;
default :printf("\n 输入超出范围,请键入0-3!\n\n");}
if(menu_3!='0') {PAUSE;}
}
}
gather_per() /*个人汇总*/
{float aver=0,sum=0;
int t,i;
if(head==null) return;/*若无数据则返回*/
p1=head;
printf("********************************************************************************\n");
printf("学号 班级 姓名 英语 高等数学 C语言 物理 法律 平均 总分 \n");
printf("********************************************************************************\n");
for(i=0;i<n;i++,sum=0)
{for(t=0;t<5;t++)
sum=sum+p1->score[t];
aver=sum/5;
printf("%-13.0lf%-4d%-12s",p1->num,p1->class,p1->name);
for(t=0;t<5;t++)
printf("%-5.1f ",p1->score[t]);
printf(" %5.1f ",aver);
printf("%5.1f\n",sum);
if((i+1)%20==0) {printf(" 按任意键进入下一页...\n"); getch();}/*若记录超过一个屏幕,则暂停显示*/
p1=p1->next;
}
}
gather_class() /*班汇总*/
{int class,k=0,t,i,flag,x;
float max,min,sum=0,aver;
printf("Class :");
scanf("%d",&class);
printf(" *****************************************************************************\n");
printf("
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -