学生信息管理是一个学校不可缺少的部分,它的内容对于学校的管理者和学生以及学生家长来说都至关重要。
学生信息管理系统对学校加强学生成绩管理有着极其重要的作用。由于各个大学都在持续扩招,学生的数量日益庞大,对于如何管理如此庞大的学生成绩数据显得更为复杂,传统的手工成绩管理不仅工作量大,而且容易出现问题,如:效率低、保密性差,时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。已不能适应时代的发展。
随着科学技术的不断提高,使用计算机对学生成绩信息进行管理,具有手工管理所无法比拟的优点。例:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高管理者管理的效率,也是学校走向科学化、正规化管理,与世界接轨的重要条件。因此,开发设计这样一个学生信息管理系统具有非常重要的意义。.
程序框图如下
#include#include #include #include typedef struct Node { int sid ; //学号 char name[50]; //姓名 char sex[10]; //性别 int cn,en,ms; //语英数三科成绩 int sum; //总分 struct Node *next; }node; node List; //定义链表储存每一个学生信息 void welcome(); //主菜单显示函数 int readFile (node *L); //文件读取函数 int saveFile (node *L); //文件保存函数 void UIaddstudent(); //添加学生信息界面 void addstudent(node *L,node p); //头插法插入链表 void UIoutputstudent(node *L);//显示界面 void outputstudent(node *L);//显示学生成绩信息 void UIsearchstudent(node *L); //查找学生信息界面 node* IDsearchstudent(node *L,int id);//学号查找 node* NAsearchstudent(node *L,char name[]);//姓名查找 int UIfixstudent(node *L); //修改信息界面 void fixstudent(node *st,node *L);//修改信息 void UIdeletestudent(node *L);//删除界面 void deletstudent(node *pd); //删除操作函数 void quitstuden(); //退出系统 int findmaxgrade(node *L,int subject);//s0:语文s1:英语s2:数学s3:总分 void sortstudent(node *L); //直接排序函数 int cmpnode(node a,node b); //比较 int main() { int choose=0,ture=1; readFile(&List); while (ture) { system("cls"); //清屏 welcome(); printf("请输入对应功能键:"); scanf("%d",&choose); switch (choose) { case 1:UIaddstudent(); //添加学生信息 break; case 2:UIoutputstudent(&List); //显示学生信息 break; case 3:UIsearchstudent(&List); //查询学生信息 break; case 4:UIfixstudent(&List); //修改学生信息 break; case 5:UIdeletestudent(&List); //删除学生信息 break; case 6:quitstuden(); //退出管理系统 break; } printf("是否继续操作?(yes or no/1 or 0):"); scanf("%d",&ture); if(ture==0) break; } return 0; } void welcome() //主菜单功能界面 { printf("—————————————————n"); printf("| |n"); printf("| 学生基本信息管理系统 |n"); printf("| |n"); printf("—————————————————n"); printf("| |n"); printf("| 104设计组 |n"); printf("| |n"); printf("—————————————————n"); printf("| |n"); printf("| 添加学生信息--->1 |n"); printf("| |n"); printf("| 显示学生信息--->2 |n"); printf("| |n"); printf("| 查询学生信息--->3 |n"); printf("| |n"); printf("| 修改学生信息--->4 |n"); printf("| |n"); printf("| 删除学生信息--->5 |n"); printf("| |n"); printf("| 退出管理系统--->6 |n"); printf("| |n"); printf("—————————————————n"); } void UIaddstudent() //插入学生信息界面 { system("cls"); node st; printf("请输入新增学生基本信息:n"); printf("学号:"); scanf("%d",&st.sid); printf("姓名:"); scanf("%s",st.name); printf("性别:"); scanf("%s",st.sex); printf("语文:"); scanf("%d",&st.cn); printf("英语:"); scanf("%d",&st.en); printf("数学:"); scanf("%d",&st.ms); st.sum=st.cn+st.en+st.ms; addstudent(&List,st); saveFile(&List); } void addstudent(node *L,node p) //头插法插入链表 { node *h=L; node *s=(node *)malloc(sizeof(node)); *s=p; s->next=h->next; h->next=s; } void UIoutputstudent(node *L) //显示方式 { int choose; system("cls"); printf(" 请选择显示样式:n"); printf(" 添加时间降序显示--->1n"); printf(" 总分成绩降序显示--->2n"); scanf("%d",&choose); if(choose==1) { outputstudent(L); } else if(choose==2) { sortstudent(L); outputstudent(L); } else printf("输入错误!"); } void outputstudent(node *L) //显示学生信息 { system("cls"); node *p=L->next; if(p!=NULL) { printf("_____________________________________________________n"); printf("#学号#t#姓名#t#性别#t#语文#t#英语#t#数学#t#总分#n"); printf("_____________________________________________________n"); while(p!=NULL) { printf("%d|%st|%st|%dt|%dt|%dt|%dtn",p->sid,p->name,p->sex,p->cn,p->en,p->ms,p->sum); printf("_____________________________________________________n"); p=p->next; } } printf("语文最高分:%dn",findmaxgrade(L,0)); printf("英语最高分:%dn",findmaxgrade(L,1)); printf("数学最高分:%dn",findmaxgrade(L,2)); printf("总分最高分:%dn",findmaxgrade(L,3)); } void UIsearchstudent(node *L) //查询学生信息 { system("cls"); int choice=0,id; char name[30]; node *st; printf(" 按学号查询--->1 n"); printf(" 按姓名查询--->2 n"); printf("输入查询方式:"); scanf("%d",&choice); if(choice==1) { printf("请输入学号:"); scanf("%d",&id); st=IDsearchstudent(L,id); st=st->next; if (st==NULL) printf("查无此人!"); else { printf("_____________________________________________________n"); printf("#学号#t#姓名#t#性别#t#语文#t#英语#t#数学#t#总分#n"); printf("_____________________________________________________n"); printf("%d|%st|%st|%dt|%dt|%dt|%dtn",st->sid,st->name,st->sex,st->cn,st->en,st->ms,st->sum); printf("_____________________________________________________n"); } } else if(choice==2) { printf("请输入姓名:"); scanf("%s",name); st=NAsearchstudent(L,name); st=st->next; if (st==NULL) printf("查无此人!n"); else { printf("_____________________________________________________n"); printf("#学号#t#姓名#t#性别#t#语文#t#英语#t#数学#t#总分#n"); printf("_____________________________________________________n"); printf("%d|%st|%st|%dt|%dt|%dt|%dtn",st->sid,st->name,st->sex,st->cn,st->en,st->ms,st->sum); printf("_____________________________________________________n"); } } else printf("输入错误!n"); } node* IDsearchstudent(node *L,int id) //学号查找 { node *p=L; while (p->next!=NULL) { if(p->next->sid==id) return p; //找到节点位置立刻返回 p=p->next; } return NULL; } node* NAsearchstudent(node *L,char name[]) //姓名查找 { node *p=L; while (p->next!=NULL) { if(strcmp(p->next->name,name)==0) //使用字符串比较函数 return p; p=p->next; } return NULL; } int UIfixstudent(node *L) //修改学生信息 { system("cls"); int id; printf("请输入要修改的学生学号:"); scanf("%d",&id); node *st=IDsearchstudent(L,id); st=st->next; if (st==NULL) { printf("查无此人!n"); return 0; } printf("_____________________________________________________n"); printf("#学号#t#姓名#t#性别#t#语文#t#英语#t#数学#t#总分#n"); printf("_____________________________________________________n"); printf("%d|%st|%st|%dt|%dt|%dt|%dtn",st->sid,st->name,st->sex,st->cn,st->en,st->ms,st->sum); printf("_____________________________________________________n"); fixstudent(st,L); return 0; } void fixstudent(node *st,node *L) { int choose; while (1) { printf("修改姓名 --->1n"); printf("修改性别 --->2n"); printf("修改语文成绩--->3n"); printf("修改英语成绩--->4n"); printf("修改数学成绩--->5n"); printf("请输入要修改的信息:n"); scanf("%d",&choose); switch (choose) { case 1: printf("请输入新姓名:n"); scanf("%s",st->name); break; case 2: printf("请输入新性别:n"); scanf("%s",st->sex); break; case 3: printf("请输入新语文成绩:n"); scanf("%d",&st->cn); break; case 4: printf("请输入新英语成绩:n"); scanf("%d",&st->en); break; case 5: printf("请输入新数学成绩:n"); scanf("%d",&st->ms); break; } st->sum=st->cn + st->en + st->ms; printf("修改成功!n"); printf("_____________________________________________________n"); printf("#学号#t#姓名#t#性别#t#语文#t#英语#t#数学#t#总分#n"); printf("_____________________________________________________n"); printf("%d|%st|%st|%dt|%dt|%dt|%dtn",st->sid,st->name,st->sex,st->cn,st->en,st->ms,st->sum); printf("_____________________________________________________n"); printf("是否继续修改(yes or no/1 or 0):n"); scanf("%d",&choose); if(choose==0) break; } saveFile(L); } void UIdeletestudent(node *L) //删除界面 { system("cls"); int id; printf("请输入要删除的学生学号:"); scanf("%d",&id); node *st=IDsearchstudent(L,id); node *p=st; st=st->next; if (st==NULL) { printf("查无此人!n"); return; } printf("_____________________________________________________n"); printf("#学号#t#姓名#t#性别#t#语文#t#英语#t#数学#t#总分#n"); printf("_____________________________________________________n"); printf("%d|%st|%st|%dt|%dt|%dt|%dtn",st->sid,st->name,st->sex,st->cn,st->en,st->ms,st->sum); printf("_____________________________________________________n"); deletstudent(p); saveFile(L); } void deletstudent(node *pd) //删除操作 { node *s=pd->next; pd->next=s->next; s->next=NULL; free(s); } void quitstuden() //退出程序 { system("cls"); printf("—————————————————n"); printf("| |n"); printf("| 学生基本信息管理系统 |n"); printf("| |n"); printf("—————————————————n"); printf("| |n"); printf("| 104设计组 |n"); printf("| |n"); printf("—————————————————n"); printf("| |n"); printf("| |n"); printf("| |n"); printf("| |n"); printf("| |n"); printf("| |n"); printf("| |n"); printf("| 欢迎下次使用! |n"); printf("| |n"); printf("| |n"); printf("| |n"); printf("|北京时间%s |n",__TIME__); printf("| |n"); printf("| |n"); printf("| |n"); printf("| |n"); printf("| |n"); printf("—————————————————n"); exit(0); } int readFile(node *L) //文件读取 { node st; node *s; node *t=L; FILE *fpr=fopen("StudentInfor.txt","r"); if(fpr==NULL) return 0; else { while(fscanf(fpr,"%d %s %s %d %d %d %d",&st.sid,st.name,st.sex,&st.cn,&st.en,&st.ms,&st.sum)!=EOF) { s=(node *)malloc(sizeof(node)); *s=st; t->next=s; t=s; t->next=NULL; } } fclose(fpr); return 1; } int saveFile(node *L) //文件保存 { FILE *fps=fopen("StudentInfor.txt","w"); if (fps==NULL) return 0; node *p=L->next; while(p!=NULL) //遍历写入信息保存 { fprintf(fps,"%d %s %s %d %d %d %dn",p->sid,p->name,p->sex,p->cn,p->en,p->ms,p->sum); p=p->next; } fclose(fps); return 1; } int findmaxgrade(node *L,int subject) //查找最高分 { node *p=L->next; if(p!=NULL) { int max[4]={-1,-1,-1,-1}; while (p!=NULL) { if(p->cn>max[0]) max[0]=p->cn; if(p->en>max[1]) max[1]=p->en; if(p->ms>max[2]) max[2]=p->ms; if(p->sum>max[3]) max[3]=p->sum; p=p->next; } return max[subject]; } return -1;//查询失败 } void sortstudent(node *L) //直接排序降序 { node *p=L->next; for (;p!=NULL;p=p->next) { node *q=p; for (;q!=NULL;q=q->next)//直接排序法 if(!cmpnode(*p,*q)) { node t=*p; //交换数据域 *p=*q; *q=t; t.next=p->next; //交换指针域防止死循环 p->next=q->next; q->next=t.next; } } } int cmpnode(node a,node b) //比较函数 { int s; if(a.sum>b.sum) s=1; else s=0; return s; }



