2022年学生信息管理系统源代码终版 .pdf
#include stdio.h #include stdlib.h#include string.hint shoudsave =0; /* */struct student char num10;/* 学号 */char name20; char sex4; int age; int cgrade; int mgrade; int egrade; int totle; int ave; char xueyuan30; char banji20; char ID30; char phone20; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 28 页 - - - - - - - - - char address50; char neartime10; /* 最近更新时间*/; typedef struct node struct student data; struct node *next; Node,*Link; int login()/* 登录函数 */ char logname30; printf( 请输入用户名和密码: n 用户名 :); scanf( %c ,logname); void menu() printf( *请按照提示操作,否则可能出现错误*); printf( *); printf( t1 登记学生资料 tt2删除学生资料 tt7统计学生资料 n ); printf( t3 查询学生资料 tt4修改学生资料 tt8排序 n ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 28 页 - - - - - - - - - printf( t5 保存学生资料 tt6输出学生资料 tt0结束n ); printf( *n); void printstart() printf( -n); void Wrong() printf( n=提示:输入错误 !n ); void Nofind() printf( n=提示:没有找到该学生 !n ); void printc() /* 本函数用于输出中文*/名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 28 页 - - - - - - - - - printf( 学号t 姓名性别年龄英语成绩数学成绩C语言成绩总分 平均分学院班级身份证电话住址n ); void printe(Node *p)/* 本函数用于输出英文*/printf( %-12s%-8s%-6s%-6d%-6d%-6d%-6d%-6d%-8d%-20s%-15s%-20s%-15s%-20sn,p- data .num,p- data .name,p- data .sex,p- data .age,p- data .egrade,p - data .mgrade,p - data .cgrade,p - data .totle,p - data .ave,p- data .xueyuan,p - data .banji,p - data .ID,p- data .phone,p - data .address); Node* Locate(Link l, char findmess, char nameornum) /* 该函数用于定位链表中符合要求的接点,幵返回该指针*/Node *r; if(strcmp(nameornum,num )=0) /* 按学号查询*/r=l- next; while(r!=NULL) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 28 页 - - - - - - - - - if(strcmp(r - data .num,findmess) = 0) return r; r=r- next; else if(strcmp(nameornum,name )=0) /* 按姓名查询*/r=l- next; while(r!=NULL) if(strcmp(r - data .name,findmess) = 0) return r; r=r- next; return 0; void Add(Link l) /* 增加学生*/名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 28 页 - - - - - - - - - Node *p,*r,*s; char num10; r=l; s=l- next; while(r- next !=NULL) r=r- next; /* 将指针置于最末尾*/while(1) printf( 请你输入学号 (以0返回上一级菜单 :); scanf( %s ,num); if(strcmp(num, 0)= 0) break ; while(s) if(strcmp(s - data .num,num) =0) printf( =提示:学号为 %s 的学生已经存在 ,若要修改请你选择 4 修改!n ,num); printstart(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 28 页 - - - - - - - - - printc(); printe(s); printstart(); printf( n ); return ; s=s- next; p=(Node *)malloc(sizeof (Node); strcpy(p - data .num,num); printf( 请你输入姓名 :); scanf( %s ,p- data .name); getchar(); printf( 请你输入性别 :); scanf( %s ,p- data .sex); getchar(); printf( 请你输入年龄 :); scanf( %d ,&p- data .age); getchar(); printf( 请你输入 c语言成绩 :); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 28 页 - - - - - - - - - scanf( %d ,&p- data .cgrade); getchar(); printf( 请你输入数学成绩 :); scanf( %d ,&p- data .mgrade); getchar(); printf( 请你输入英语成绩 :); scanf( %d ,&p- data .egrade); getchar(); printf( 请你输入学院名 :); scanf( %s ,&p- data .xueyuan); getchar(); printf( 请你输入班级 :); scanf( %s ,&p- data .banji); getchar(); printf( 请你输入身份证 :); scanf( %s ,&p- data .ID); getchar(); printf( 请你输入电话 :); scanf( %s ,&p- data .phone); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 28 页 - - - - - - - - - getchar(); printf( 请你输入家庭住址 :); scanf( %s ,&p- data .address); getchar(); p- data .totle =p- data .egrade +p- data .cgrade +p- data .mgrade; p- data .ave=p- data .totle / 3; /* 信息输入已经完成*/p- next =NULL; r- next =p; r=p; shoudsave =1; void Qur(Link l) /* 查询学生*/int sel; char findmess20; Node *p; if(!l- next) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 28 页 - - - - - - - - - printf( n=提示:没有资料可以查询 !n ); return ; printf( n=1按学号查找 n=2按姓名查找 n ); scanf( %d ,&sel); if(sel= 1) /* 学号 */printf( 请你输入要查找的学号 :); scanf( %s ,findmess); p=Locate(l,findmess,num ); if(p) printf( tttt查找结果 n ); printstart(); printc(); printe(p); printstart(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 28 页 - - - - - - - - - elseNofind(); else if(sel=2) /* 姓名 */printf( 请你输入要查找的姓名 :); scanf( %s ,findmess); p=Locate(l,findmess,name ); if(p) printf( tttt查找结果 n ); printstart(); printc(); printe(p); printstart(); elseNofind(); else名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 28 页 - - - - - - - - - Wrong(); void Del(Link l) /* 删除 */int sel; Node *p,*r; char findmess20; if(!l- next) printf( n=提示:没有资料可以删除 !n ); return ; printf( n=1按学号删除 n=2按姓名删除 n ); scanf( %d ,&sel); if(sel= 1) printf( 请你输入要删除的学号 :); scanf( %s ,findmess); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 28 页 - - - - - - - - - p=Locate(l,findmess,num ); if(p) r=l; while(r- next !=p) r=r- next; r- next =p- next; free(p); printf( n=提示:该学生已经成功删除 !n ); shoudsave =1; elseNofind(); else if(sel=2) printf( 请你输入要删除的姓名 :); scanf( %s ,findmess); p=Locate(l,findmess,name ); if(p) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 28 页 - - - - - - - - - r=l; while(r- next !=p) r=r- next; r- next =p- next; free(p); printf( n=提示:该学生已经成功删除 !n ); shoudsave =1; elseNofind(); elseWrong(); void Modify(Link l) Node *p; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 28 页 - - - - - - - - - char findmess20; if(!l- next) printf( n=提示:没有资料可以修改 !n ); return ; printf( 请你输入要修改的学生学号:); scanf( %s ,findmess); p=Locate(l,findmess,num ); if(p) printf( 请你输入新学号 (原来是 %s):,p- data .num); scanf( %s ,p- data .num); getchar(); printf( 请你输入新姓名 (原来是 %s):,p- data .name); scanf( %s ,p- data .name); getchar(); printf( 请你输入新性别 (原来是 %s):,p- data .sex); scanf( %s ,p- data .sex); printf( 请你输入新年龄 (原来是 %d):,p- data .age); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 28 页 - - - - - - - - - scanf( %d ,&p- data .age); getchar(); printf( 请你输入新的 c语言成绩 (原来是 %d分):,p- data .cgrade); scanf( %d ,&p- data .cgrade); getchar(); printf( 请你输入新的数学成绩 (原来是 %d分):,p- data .mgrade); scanf( %d ,&p- data .mgrade); getchar(); printf( 请你输入新的英语成绩 (原来是 %d分):,p- data .egrade); scanf( %d ,&p- data .egrade); getchar(); printf( 请你输入新学院名 (原来是 %s):,p- data .xueyuan); scanf( %s ,p- data .xueyuan); getchar(); printf( 请你输入新班级 (原来是 %s):,p- data .banji); scanf( %s ,p- data .banji); getchar(); printf( 请你输入新身份证 (原来是 %s):,p- data .ID); scanf( %s ,p- data .ID); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 28 页 - - - - - - - - - getchar(); printf( 请你输入新电话 (原来是 %s):,p- data .phone); scanf( %s ,p- data .phone); getchar(); printf( 请你输入新家庭住址 (原来是 %s):,p- data .address); scanf( %s ,p- data .address); getchar(); p- data .totle =p- data .egrade +p- data .cgrade +p- data .mgrade; p- data .ave=p- data .totle / 3; printf( n=提示:资料修改成功 ,注意保存 !n ); shoudsave =1; elseNofind(); void Disp(Link l) int count =0; Node *p; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 28 页 - - - - - - - - - p=l- next; if(!p) printf( n=提示:没有资料可以显示 !n ); return ; printf( tttt显示结果 n ); printstart(); printc(); printf( n ); while(p) printe(p); p=p- next; printstart(); printf( n ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 28 页 - - - - - - - - - void Tongji(Link l) Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高的接点*/Node *r=l- next; if(!r) printf( n=提示:没有资料可以统计 !n ); return ; pm=pe=pc=pt =pa=r; while(r!=NULL) if(r- data .cgrade = pc- data .cgrade) pc=r; if(r- data .mgrade = pm- data .mgrade) pm=r; if(r- data .egrade = pe- data .egrade) pe=r; if(r- data .totle = pt - data .totle) pt =r; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 28 页 - - - - - - - - - if(r- data .ave= pa- data .ave) pa=r; r=r- next; printf( -统计结果-n); printf( 总分最高者 :t%s %d 分n ,pt- data .name,pt - data .totle); printf( 平均分最高者 :t%s %d 分n ,pa- data .name,pa - data .ave); printf( 英语最高者 :t%s %d 分n ,pe- data .name,pe - data .egrade); printf( 数学最高者 :t%s %d 分n ,pm- data .name,pm - data .mgrade); printf( c语言最高者 :t%s %d 分n ,pc- data .name,pc - data .cgrade); printstart(); void Sort(Link l) Link ll; Node *p,*rr, *s; int sortoption; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 28 页 - - - - - - - - - ll=(Link)malloc( sizeof (Node); /* 用于做新的连表*/ll- next =NULL; if(l- next = NULL) printf( n=提示:没有资料可以排序 !n ); return ; p=l- next; printstart(); printf ( t0 按学号排序 tt1 按成绩排序 ); printstart(); scanf( %d ,&sortoption); if(sortoption =1) while(p) s=(Node*)malloc(sizeof (Node); /* 新建接点用于保存信息*/s- data =p- data; s- next =NULL; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 28 页 - - - - - - - - - rr =ll; while(rr - next !=NULL & rr - next - data .totle = p- data .totle) rr =rr - next; if(rr - next = NULL) rr - next =s; elses- next =rr - next; rr - next =s; p=p- next; else while(p) s=(Node*)malloc(sizeof (Node); /* 新建接点用于保存信息*/s- data =p- data; s- next =NULL; rr =ll; while(rr - next !=NULL & (strcmp(rr - next - data .num,p- data .num) next; if(rr - next = NULL) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 28 页 - - - - - - - - - rr - next =s; elses- next =rr - next; rr - next =s; p=p- next; free(l); l- next =ll- next; printf( n=提示:排序已经完成 !n ); void Save(Link l) FILE * fp; Node *p; int flag =1,count=0; fp =fopen( e:student,wb ); if(fp =NULL) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 28 页 - - - - - - - - - printf( n=提示:重新打开文件时发生错误!n ); exit(1); p=l- next; while(p) if(fwrite(p, sizeof (Node),1,fp)= 1) p=p- next; count + ; elseflag =0; break ; if(flag) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 28 页 - - - - - - - - - printf( n=提示:文件保存成功 .(有%d条记录已经保存 .)n ,count); shoudsave =0; fclose(fp); void main() Link l; /* 连表 */FILE *fp; /* 文件指针*/int sel; char ch; char jian; int count =0; Node *p,*r; printf( tttt学生成绩管理系统 nttt青岛理工大学计算机工程学院计算091nttt 梁德智 200907030n ); l=(Node*)malloc(sizeof (Node); l- next =NULL; r=l; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 28 页 - - - - - - - - - fp =fopen( e:student,rb ); if(fp =NULL) printf( n=提示:文件还不存在,是否创建?(y/n)n ); scanf( %c ,&jian); if(jian = y |jian = Y) fp =fopen( e:student,wb ); elseexit(0); printf( n=提示:文件已经打开 ,正在导入记录 ,关闭后打开可执行文件 n ); while(!feof(fp) p=(Node*)malloc(sizeof (Node); if(fread(p, sizeof (Node),1,fp) /* 将文件的内容放入接点中*/p- next =NULL; r- next =p; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 28 页 - - - - - - - - - r=p; /* 将该接点挂入连中*/count + ; fclose(fp); /* 关闭文件*/printf( n=提示:记录导入完毕 ,共导入 %d条记录 .n ,count); while(1) menu(); printf( 请你选择操作 :); scanf( %d ,&sel); if(sel= 0) if(shoudsave =1) getchar(); printf( n=提示:资料已经改动 ,是否将改动保存到文件中(y/n)?n ); scanf( %c ,&ch); if(ch= y|ch= Y) Save(l); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页,共 28 页 - - - - - - - - - printf( n=提示:你已经退出系统 ,再见!n ); break ; switch (sel) case 1:Add(l);break ; /* 增加学生 */case 2:Del(l);break ;/* 删除学生*/case 3:Qur(l);break ;/* 查询学生*/case 4:Modify(l);break ;/* 修改学生*/case 5:Save(l);break ;/* 保存学生*/case 6:Disp(l);break ; case 7:Tongji(l); break ; case 8:Sort(l);break ; default : Wrong();getchar(); break ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 28 页,共 28 页 - - - - - - - - -