c语言做的学生管理系统_第1页
c语言做的学生管理系统_第2页
c语言做的学生管理系统_第3页
免费预览已结束,剩余29页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/*Copyright (c) 2012, 陈长佑*All right reserved* 文件名称 :log_menu.c*文件标识:* 摘 要:本文件放置了登录函数,功能是登录到管理员主菜单或学生主菜单,* 管理员账户固定, 登录前加载密码, 学生登录前先加载学生信息, 然后匹配学生用户名和 密码。*版 本: 1.0* 作 者:陈长佑 *完成日期: 2012年 8月4日*/ #includegloble.h void loger()/ 登录函数int m=0;int i=0;int y=310909;/ 固定的管理员账户char st32;/ 把加载的管理员密码放到该数组中char str

2、32;/ 把输入密码放到该数组中 node_p head=create_headnode();/ 创建头结点 strcpy(st,load_manege_key();/75 加载管理员密码 head=load_stu(head);/ 加载学生信息 for(i=0;inext; if(sp!=NULL)while(sp!=NULL)if(m=sp-stu.num)&(strcmp(str,sp-stu.key)=0)/ 验证学生学号和密码 break;sp=sp-next;if(sp!=NULL)student_menu(head,m);/ 进入学生菜单elseprintf( 系统不存在这用户

3、!n);if(inext=NULL;return head;node_p create_node()/ 创建空结点,无指向node_p headp; headp=(node_p)malloc(sizeof(node_t); if(headp=NULL)exit(1);headp-next = NULL;return headp;node_p input_data()/ 输入学生信息node_p headp;static int k;k=add_num();headp=create_node();if(headp=NULL)printf( 内存分配失败 n);headp-stu.num=k;pr

4、intf( 自动生成学号 n); printf(%d,headp-stu.num); printf( 请输入姓名 n); scanf(%s,); getchar();printf( 请输入密码 n); scanf(%s,headp-stu.key);getchar();printf( 请输入年龄 n); if(headp-stu.agestu.age150)printf( 输入 );/*elseprintf( 请输入学生名字 密码 年龄 班级 n);scanf(%s %s %d %d,,headp-stu.key,&headp-stu.a

5、ge,&headp-stu.class es);getchar();printf( 请输入数学 语文 c 语言成绩: n);scanf(%d %d %d,&headp-stu.grade.math,&headp-stu.grade.chinese,&headp-stu.grade. c);*/k+;return headp;int add_num()/ 学号自增函数int a=301;int b,c,d,t;printf( 请设置学号的年级 班级 第一个学生的编号 n); scanf(%d %d %d,&b,&c,&d);getchar(); t=a*1000000+b*10000+c*100

6、+d;return t;node_p insert_node(node_p head,node_p headp)/ 把结点插入到链表中去 headp-next=head-next; head-next=headp;return head; node_p add_stu(node_p head)/ 增加学生信息int n;int i;node_p headp;printf( 输入学生人数 n); scanf(%d,&n);getchar(); if(head=NULL)exit(1); for(i=0;inext;while(headp!=NULL) fwrite(&headp-stu,size

7、of(STU),1,fp); headp=headp-next;printf( 保存学生信息成功 n);fclose(fp);flag=0;getchar();return head;node_p load_stu(node_p head)/ 加载学生信息FILE* fp;if(head=NULL)exit(1);node_p p=head-next;while(p!=NULL)head-next = p-next;free(p);p-next=NULL;p = head-next;if(fp=fopen(stb,rt)=NULL)printf( 不能打开文件 n);exit(1);node_

8、p headp =create_node();while(fread(&headp-stu,sizeof(STU),1,fp)=1)printf( 学 号 =%d, 姓 名 =%s, 密 码 =%s, 年 龄 =%d, 班 级 =%dn,headp-stu.num,,headp-stu.key,headp-stu.age,headp-stu.classes);printf( 数 学 =%d, 语 文 =%d,c 语 言 =%dn,headp-stu.grade.math,headp-stu.grade.chinese,headp-stu.grade.c);head=

9、insert_node(head,headp);headp =create_node();fclose(fp);flag=0;printf( 加载学生信息成功 n);getchar();return head;node_p delete_stu(node_p head)/ 删除学生信息 int n;node_p headp;if(head=NULL)exit(1);headp=head-next; if(headp=NULL) exit(1); printf( 请输入删除学生的学号 :n); scanf(%d,&n);getchar();if(headp!=NULL)while(headp!=

10、NULL) if(n=headp-stu.num) break;head=head-next; headp=headp-next;if(headp!=NULL) head-next=headp-next; free(headp); headp-next=NULL; printf( 删除学生信息成功 n); flag=1;elseprintf( 系统不存在这用户 !n);return head;node_p modify_stu(node_p head)/ 修改学生信息 int i;int choice;while(1)system(clear); printf(=n);printf(1: 修改

11、学生成绩 n);printf(2: 修改学生姓名 n);printf(3: 修改学生班级 n);printf(0: 返回上一级菜单 n); printf(=n);printf( 请选择: n); i=scanf(%d,&choice);while(i=0)printf( 输入错误,请重新输入 :n); while(getchar()!=n);/ 清空键盘缓冲 i=scanf(%d,&choice);getchar();/ 去掉换行符switch(choice)case 1:modify_score(head);break;case 2:modify_name(head);break;case

12、3:modify_classes(head);break;case 0:return head;default:printf( 输入不对,请重新输入: );break; getchar();flag=1; return head;void search_stu(node_p head)int i;int choice;while(1)system(clear); printf(=n); printf(1: 按姓名查询学生信息 n); printf(2: 按班级查询学生信息 n);printf(3: 按总成绩排名查询学生信息 n); printf(0: 返回上一级菜单 n);printf(=n)

13、; printf( 请选择: n);i=scanf(%d,&choice);while(i=0)printf( 输入错误,请重新输入 :n); while(getchar()!=n);/ 清空键盘缓冲 i=scanf(%d,&choice);/ getchar();/ 去掉换行符switch(choice)case 1:name_search(head);break;case 2:classes_search(head);break;case 3:total_sort_output(head); break;case 0:return;default:printf( 输入不对,请重新输入: )

14、; break; getchar(); flag=0; return;void sort_stu(node_p head)int i;int choice; while(1)system(clear); printf(=n); printf(1: 根据总成绩显示学生信息 n); printf(2: 根据排名显示学生信息 n); printf(3: 根据姓名排名显示学生信息 n); printf(0: 返回上一级菜单 n); printf(=n); printf( 请选择: n); i=scanf(%d,&choice);while(i=0)printf( 输入错误,请重新输入 :n); whi

15、le(getchar()!=n);/ 清空键盘缓冲 i=scanf(%d,&choice);/ getchar();/ 去掉换行符switch(choice)case 1:total_sort_output(head); break;case 2:rank_output(head);break;case 3:name_sort_output(head);break;case 0:return;default:printf( 输入不对,请重新输入: );break;getchar();flag=0;return;void printf_stu(node_p head)/ 打印学生信息 if(he

16、ad=NULL) exit(1);node_p headp=head-next;while(headp!=NULL)printf( 学 号 =%d, 姓 名 =%s, 密 码 =%s, 年 龄 =%d, 班 级 =%dn,headp-stu.num,,headp-stu.key,headp-stu.age,headp-stu.classes);printf( 数 学 =%d, 语 文 =%d,c 语 言 =%dn,headp-stu.grade.math,headp-stu.grade.chinese,headp-stu.grade.c);headp=headp-n

17、ext;getchar();return;void quit_stu(node_p head)/ 退出管理员菜单函数 if(head=NULL)exit(1); if(flag=0)exit(1); if(flag=1)printf( 是否保存信息 y 或 n:n); getchar(); if(getchar()=y|getchar()=Y) save_stu(head); exit(1); if(n=getchar()|N=getchar() exit(1); return;void save_manege_key()/ 保存管理员密码FILE *fp;char st32=abcde; i

18、f(fp=fopen(sts,wt)=NULL)printf( 不能打开文件 n);exit(1);fprintf(fp,%s,st);rewind(fp);fclose(fp);printf( 保存管理员密码成功 n);getchar();return;char* load_manege_key()/ 加载管理员密码 FILE *fp;static char st32=; if(fp=fopen(sts,rt)=NULL) printf( 不能打开文件 n);exit(1);fscanf(fp,%s,st);rewind(fp);fclose(fp);printf( 加载管理员密码成功 n)

19、; return st;void modify_manege_key()/ 修改管理员密码FILE *fp;static char snew32=;static char gnew32=;while(1)printf( 请输入管理员新密码 :n);scanf(%s,snew);getchar();printf( 请再次输入管理员新密码 :n); scanf(%s,gnew);if(strcmp(snew,gnew)=0)if(fp=fopen(sts,wt)=NULL)printf( 不能打开文件 n);exit(1);fprintf(fp,%s,gnew);rewind(fp);fclose

20、(fp);printf( 修改密码成功 n);getchar();break;elsen);printf( 输入新密码不正确,请重新输入return;/*Copyright (c) 2012, 陈长佑*All right reserved* 文件名称 :modify_menu.c*文件标识:* 摘 要:本文件放置了修改菜单中的各个子函数, 功能是修改学生的名字 班级 各科分数 (数学 语文 c 语言)。*版 本: 1.0* 作 者:陈长佑 *完成日期: 2012年 8月4日*/#includegloble.hvoid modify_name(node_p head)/ 修改名字子函数stati

21、c char a32;static char b32;node_p headp; if(head=NULL)exit(1); headp=find(head);/118 定位要修改学生的当前位置 printf( 显示原来学生的名字 n);printf(%sn,);while(1)printf( 请输入旧的名字 n); scanf(%s,a);getchar(); if(strcmp(,a)=0)printf( 请输入新名字 n); scanf(%s,b);getchar(); strcpy(,b); print

22、f( 修改姓名成功 n);flag=1;return;elseprintf( 请再次输入旧的名字 n);return;void modify_classes(node_p head)/ 修改班级子函数static int k;static int h;node_p headp;if(head=NULL)exit(1);headp=find(head);/118 定位要修改学生的当前位置 printf( 显示原来学生的班级 n);printf(%dn,headp-stu.classes);while(1)printf( 请输入旧的班级 n); scanf(%d,&k);getchar();if(

23、headp-stu.classes=k)printf( 请输入新班级 n); scanf(%d,&h);getchar();headp-stu.classes=h; printf( 修改班级成功 n);flag=1;return;elseprintf( 请再次输入旧的班级 n);return;void modify_score(node_p head)/ 修改成绩子函数 int i,choice;while(1)system(clear); printf(=n);printf(1: 修改数学成绩 n);printf(2: 修改语文成绩 n);printf(3: 修改 c 语言成绩 n); pr

24、intf(0: 返回上一级菜单 n); printf(=n); printf( 请选择: n); i=scanf(%d,&choice);while(i=0)printf( 输入错误,请重新输入 :n); while(getchar()!=n);/ 清空键盘缓冲 i=scanf(%d,&choice);/ getchar();/ 去掉换行符switch(choice)case 1: modify_math_score(head); break;case 2: modify_chinese_score(head); break;case 3: modify_clanguage_score(hea

25、d); break;case 0:return;default:printf( 输入不对,请重新输入 ); break;getchar();flag=1;return;void modify_math_score(node_p head)/ 修改数学成绩static int h; static int k; node_p headp; if(head=NULL) exit(1); headp=find(head);/118 定位要修改学生的当前位置 printf( 显示原来学生的数学成绩 n); printf(%dn,headp-stu.grade.math);while(1) printf(

26、 请输入原来的数学成绩 n); scanf(%d,&k); getchar();if(headp-stu.grade.math=k)printf( 请输入新数学成绩 n); scanf(%d,&h); getchar();headp-stu.grade.math=h; printf( 修改数学成绩成功 n); flag=1;return; else printf( 请再次输入原来的数学成绩 n); return;void modify_chinese_score(node_p head)/ 修改语文成绩 static int h; static int k; node_p headp; if(

27、head=NULL)exit(1);headp=find(head);/ 236 定位要修改学生的当前位置 printf( 显示原来学生的语文成绩 n); printf(%dn,headp-stu.grade.chinese);while(1)printf( 请输入原来的语文成绩 n); scanf(%d,&k);getchar(); if(headp-stu.grade.chinese=k)printf( 请输入新语文成绩 n); scanf(%d,&h);getchar(); headp-stu.grade.chinese=h;printf( 修改语文成绩成功 n); flag=1;ret

28、urn;elseprintf( 请再次输入原来的语文成绩 n);return;void modify_clanguage_score(node_p head)/ 修改 c 语言成绩 static int h;static int k;node_p headp;if(head=NULL)exit(1);headp=find(head);/ 定位要修改学生的当前位置 printf( 显示原来学生的 c 语言成绩 n); printf(%dn,headp-stu.grade.c);while(1)printf( 请输入原来的 c 语言成绩 n); scanf(%d,&k);getchar();if(

29、headp-stu.grade.c=k)printf( 请输入新 c 语言成绩 n); scanf(%d,&h);getchar();headp-stu.grade.c=h;printf( 修改 c 语言成绩成功 n);flag=1;return;elseprintf( 请再次输入原来的 c 语言成绩 n);return;node_p find(node_p head)/ 定位要修改学生的当前位置 int n;node_p headp; if(head=NULL)exit(1);headp=head-next; if(headp=NULL)exit(1);printf( 输入要修改学生的学号

30、:n); scanf(%d,&n);getchar(); while(n!=headp-stu.num)headp=headp-next;if(headp=NULL)exit(1);return headp;#includegloble.hvoid name_search(node_p head)/ 根据名字查询 char a6; node_p headp; if(head=NULL) exit(1); headp=head-next; if(headp=NULL) return;printf( 输入要查询的姓名 :); scanf(%s,a); getchar();while(headp!=

31、NULL) while(strcmp(a,)!=0) headp=headp-next; if(headp=NULL) return; printf( 显示学生的学号 姓名 密码 年龄 班级 n);printf(%d %s %s %d %dn,headp-stu.num,,headp-stu.key,headp-stu.a ge,headp-stu.classes);printf( 显示数学 语文 c 语言成绩 n);printf(%d %d %dn,headp-stu.grade.math,headp-stu.grade.chinese

32、,headp-stu.grade.c); headp=headp-next; getchar(); flag=0; return;void classes_search(node_p head)/ 根据班级查询int n;node_p headp; if(head=NULL)exit(1); headp=head-next; if(headp=NULL)return;printf( 输入要查询的班级 :); scanf(%d,&n);getchar(); while(headp!=NULL)while(n!=headp-stu.classes) headp=headp-next; if(hea

33、dp=NULL) return;printf( 显示学生的学号 姓名 密码 年龄 班级 n);printf(%d %s %s %d %dn,headp-stu.num,,headp-stu.key,headp-stu.a ge,headp-stu.classes);printf( 显示数学 语文 c 语言成绩 n);printf(%d %d %dn,headp-stu.grade.math,headp-stu.grade.chinese,headp-stu.grade.c); headp=headp-next;flag=0;return; /*Copyright (

34、c) 2012, 陈长佑*All right reserved* 文件名称 :sort_menu.c*文件标识:*摘 要:本文件放置了学生排序菜单中的子函数, 功能是对总成绩 名字 各科成绩 (数学语文*c 语言)进行排序,并能根据输入名次显示出学生信息。*版本:1.0*作者:陈长佑*完成日期:2012 年 8 月 4 日*/#includegloble.hvoid total_sort_output(node_p head)/ 根据所有科目的总分排序STU *pr;int n=0;int i=0;if(head=NULL)exit(1); n=function(head);/142 pr=array_rank(head,n);/128 pr=total_rank(pr,n);/ 226/printf( 输入学生总成绩的名次 n);/scanf(%d,&m);/getchar();/printf( 根据总成绩名次输出学生信息 n);/display(m,pr);/156for(i=0;inext; pr=(STU*)malloc(n*sizeof(STU);for(i=0;istu; headp=headp-next;return pr;int function(node_p head)/ 计算结点数目int n=0;node_p headp;if(hea

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论