学生信息管理系统设计_第1页
学生信息管理系统设计_第2页
学生信息管理系统设计_第3页
学生信息管理系统设计_第4页
学生信息管理系统设计_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、中 国 地 质 大 学本科生课程论文封面课程名称 c语言课程设计 教师姓名 武进霞 本科生姓名 _ 本科生学号 本科生专业 资源勘查与工程基地班所在院系 资源学院 类别: 报告 日期: 2010年2月22日 课程论文题目学生信息管理系统设计 程序设计思路学生信息管理系统设计学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,e-mail等。试设计一学生信息管理系统,使之能提供以下功能:系统以文本菜单方式工作,学生信息录入功能(学生信息最好用文件保存)-输入学生信息浏览功能-输出显示高考一本考生信息查询、排序功能-算法按学号查询按姓名查询学生信息的删除与修改(可选项)根据以上要求,设计程

2、序时需要用到多个调用函数来实现各个功能,因此在main函数中将学生信息录入过后,通过switch语句来实现进入并运行各个功能模块。在程序功能设计之前,将学生信息以结构体的形式存入;在各功能模块中,通过if、for语句来实现判断、循环功能,实现信息浏览、查询、排序等功能。功能模块图学生信息管理系统信息录入信息查询删除某个学生信息将信息按学号排序信息浏览显示一本考生信息按姓名查询按学号查询数据结构设计题目中学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,e-mail等,在程序中可以通过设计学生信息的结构体来实现学生信息的录用;再考虑到学生数量的大小,我通过建立一个数组来表示各个学生。开

3、始(进入界面)算法设计输入功能选项“1”:继续输入添加学生信息输入学生信息判断是否继续输入信息输入功能选项“2”:显示所有学生信息输入“2”:按学号查找信息输入功能选项“3”:查找学生信息进入功能模块界面输入“1”:按姓名查找信息输入功能选项“4”:输出学生信息结束输入功能选项“5”:按学号排序输入功能选项“6”:退出程序1. main函数(功能界面) void main() int change,n; printf("=学生信息管理系统=n"); printf("ttt 请输入学生信息n"); shuru(); do system("cls&

4、quot;); printf("=学生信息管理系统=n"); printf("ttt一: 输入学生信息n"); printf("ttt二: 显示学生信息n"); printf("ttt三: 查找学生信息n"); printf("ttt四: 删除学生信息n"); printf("ttt五: 按学号排序信息n"); printf("ttt六: 退出程序n"); fflush(stdin); printf("ttt请输入功能选项:"); sc

5、anf("%d",&change); switch(change) case 1:shuru(); break; case 2: xianshi(); break; case 3: printf("请输入您的学号或姓名,输入姓名请按1,输入学号请按2。(输入后按enter键)n"); printf("输入选择: "); scanf("%d",&n); getchar();switch(n)case 1:chaxingming(); break;case 2:chaxuehao();break;bre

6、ak; case 4: shanchu(); break; case 5: paixu(); break; case 6: break; getch(); while(change!=6);2. 输入学生信息void shuru() /输入学生信息 char a; do printf("n请输入学号:"); scanf("%d",&sti.id); fflush(stdin); printf("n请输入姓名:"); gets(); printf("n请输入年龄:"); scanf("

7、;%d",&sti.age); printf("n请输入性别:"); scanf("%s",&sti.sex); fflush(stdin); printf("n请输入出生年,月:"); scanf("%d,%d",&sti.birthday); printf("n请输入电话号码:"); scanf("%d",&sti.phone); fflush(stdin); printf("n请输入地址:"); scanf(

8、"%s",&sti.address); printf("n请输入email:"); scanf("%s",&sti.email); printf("n是否继续输入另外一个学生信息?(y/n)"); fflush(stdin); a=getchar(); i+; while(a='y' && i<=50); 3. 先是学生信息void xianshi() /显示学生信息 int j; for(j=0;j<i;j+) printf("学号t%dnn姓

9、名t%snn年龄t%dnn性别t%snn出生年月t%dnn电话号码t%dnn地址t%snnemailt%snn",stj.id,,stj.age,stj.sex,stj.birthday,stj.phone,stj.address,stj.email);4. 查找信息void chaxuehao() /按学号查找学生的信息 int a,num; char c; do printf("n请输入想查找的学生学号:"); fflush(stdin); scanf("%d",&num); for(a=0;a<i;a+) i

10、f(num=sta.id) printf("ntt您查找的学生在第%d个位置找到了!n",a+1); break; if(a>=50) printf("ntt没有找到这个学生!n"); else printf("学号t%dn姓名t%sn年龄t%dn性别t%sn出生年月t%dn电话号码t%dn地址t%snemailt%sn",sta.id,,sta.age,sta.sex,sta.birthday,sta.phone,sta.address,sta.email); printf("n是否查找另一个学生的信

11、息?(y/n)"); fflush(stdin); c=getchar(); while(c='y');void chaxingming() /根据姓名查询 int m,k; k=0; /用k来反映该生姓名是否重名 char name20,b; do printf("请输入姓名:"); scanf("%s",&name); for(m=0;m<50;m+) if(strcmp(,name)=0) /检索该姓名人数 k+; if(k>1) /k>1,重名 printf(" 因您与

12、某同学重名,请输入考号查询n"); chaxuehao(); /调用学号查询函数 else / 不重名情况 for(m=0;m<50;m+) if(strcmp(,name)=0) printf("ntt您查找的学生在第%d个位置找到了!n",m+1);break; if(k=0) printf("n 没有找到该学生n"); if(m>50) printf("ntt没有找到这个学生!n"); else printf("学生t%dn姓名t%sn年龄t%dn性别t%sn出生年月t%dn电话号

13、码t%dn地址t%snemailt%sn",stm.id,,stm.age,stm.sex,stm.birthday,stm.phone,stm.address,stm.email); printf("n是否查找另一个学生的信息?(y/n)"); fflush(stdin); b=getchar(); while(b='y');5. 删除void shanchu() /删除学生信息 int p,number; char c; do printf("n请输入要删除的学生学号:n"); fflush(stdin);

14、scanf("%d",&number); for(p=0;p<i;p+) if(stp.id=number) break; for(number=p;number<i;number+) stnumber=stnumber+1; if(p>i) printf("tt没有找到这个学生!n"); else i-; xianshi(); printf("n是否继续删除另一个学员信息?(y/n) "); fflush(stdin); c=getchar(); while(c='y');6. 排序void

15、 paixu() /按学号从大到小排序 int j,k,id1,age1,birthday1,phone1; char name110,sex13,address1100,email1100; for(j=0;j<i;j+) for(k=0;k<i-1-j;k+) if(stk.id>stk+1.id) id1=stk.id; stk.id=stk+1.id; stk+1.id=id1; strcpy(name1,);/name1=;strcpy() strcpy(,stk+1.name); strcpy(stk+1.name,

16、name1);strcpy(sex1,stk.sex); strcpy(stk.sex,stk+1.sex); strcpy(stk+1.sex,sex1);age1=stk.age; stk.age=stk+1.age; stk+1.age=age1;birthday1=stk.birthday; stk.birthday=stk+1.birthday; stk+1.birthday=birthday1;phone1=stk.phone; stk.phone=stk+1.phone; stk+1.phone=phone1;strcpy(address1,stk.address); strcp

17、y(stk.address,stk+1.address); strcpy(stk+1.address,address1);strcpy(email1,stk.email); strcpy(stk.email,stk+1.email); strcpy(stk+1.email,email1); xianshi(); 程序代码#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>struct studentint id;char name10;int age;char

18、 sex3;int birthday;int phone;char address100;char email100;st50;int i=0;void shuru() /输入学生信息 char a; do printf("n请输入学号:"); scanf("%d",&sti.id); fflush(stdin); printf("n请输入姓名:"); gets(); printf("n请输入年龄:"); scanf("%d",&sti.age); printf(

19、"n请输入性别:"); scanf("%s",&sti.sex); fflush(stdin); printf("n请输入出生年,月:"); scanf("%d,%d",&sti.birthday); printf("n请输入电话号码:"); scanf("%d",&sti.phone); fflush(stdin); printf("n请输入地址:"); scanf("%s",&sti.address)

20、; printf("n请输入email:"); scanf("%s",&sti.email); printf("n是否继续输入另外一个学生信息?(y/n)"); fflush(stdin); a=getchar(); i+; while(a='y' && i<=50); void xianshi() /显示学生信息 int j; for(j=0;j<i;j+) printf("学号t%dnn姓名t%snn年龄t%dnn性别t%snn出生年月t%dnn电话号码t%dnn地址t

21、%snnemailt%snn",stj.id,,stj.age,stj.sex,stj.birthday,stj.phone,stj.address,stj.email);void paixu() /按学号从大到小排序 int j,k,id1,age1,birthday1,phone1; char name110,sex13,address1100,email1100; for(j=0;j<i;j+) for(k=0;k<i-1-j;k+) if(stk.id>stk+1.id) id1=stk.id; stk.id=stk+1.id; stk+1.

22、id=id1; strcpy(name1,);/name1=;strcpy() strcpy(,stk+1.name); strcpy(stk+1.name,name1);strcpy(sex1,stk.sex); strcpy(stk.sex,stk+1.sex); strcpy(stk+1.sex,sex1);age1=stk.age; stk.age=stk+1.age; stk+1.age=age1;birthday1=stk.birthday; stk.birthday=stk+1.birthday; stk+1.birthday=bi

23、rthday1;phone1=stk.phone; stk.phone=stk+1.phone; stk+1.phone=phone1;strcpy(address1,stk.address); strcpy(stk.address,stk+1.address); strcpy(stk+1.address,address1);strcpy(email1,stk.email); strcpy(stk.email,stk+1.email); strcpy(stk+1.email,email1); xianshi(); void chaxuehao() /按学号查找学生的信息 int a,num;

24、char c; do printf("n请输入想查找的学生学号:"); fflush(stdin); scanf("%d",&num); for(a=0;a<i;a+) if(num=sta.id) printf("ntt您查找的学生在第%d个位置找到了!n",a+1); break; if(a>=50) printf("ntt没有找到这个学生!n"); else printf("学号t%dn姓名t%sn年龄t%dn性别t%sn出生年月t%dn电话号码t%dn地址t%snemailt%

25、sn",sta.id,,sta.age,sta.sex,sta.birthday,sta.phone,sta.address,sta.email); printf("n是否查找另一个学生的信息?(y/n)"); fflush(stdin); c=getchar(); while(c='y');void chaxingming() /根据姓名查询 int m,k; k=0; /用k来反映该生姓名是否重名 char name20,b; do printf("请输入姓名:"); scanf("%s"

26、,&name); for(m=0;m<50;m+) if(strcmp(,name)=0) /检索该姓名人数 k+; if(k>1) /k>1,重名 printf(" 因您与某同学重名,请输入考号查询n"); chaxuehao(); /调用学号查询函数 else /不重名情况 for(m=0;m<50;m+) if(strcmp(,name)=0) printf("ntt您查找的学生在第%d个位置找到了!n",m+1);break; if(k=0) printf("n 没有找到该

27、学生n"); if(m>50) printf("ntt没有找到这个学生!n"); else printf("学生t%dn姓名t%sn年龄t%dn性别t%sn出生年月t%dn电话号码t%dn地址t%snemailt%sn",stm.id,,stm.age,stm.sex,stm.birthday,stm.phone,stm.address,stm.email); printf("n是否查找另一个学生的信息?(y/n)"); fflush(stdin); b=getchar(); while(b='

28、y');void shanchu() /删除学生信息 int p,number; char c; do printf("n请输入要删除的学生学号:n"); fflush(stdin); scanf("%d",&number); for(p=0;p<i;p+) if(stp.id=number) break; for(number=p;number<i;number+) stnumber=stnumber+1; if(p>i) printf("tt没有找到这个学生!n"); else i-; xians

29、hi(); printf("n是否继续删除另一个学员信息?(y/n) "); fflush(stdin); c=getchar(); while(c='y');void main() int change,n; printf("=学生信息管理系统=n"); printf("ttt 请输入学生信息n"); shuru(); do system("cls"); printf("=学生信息管理系统=n"); printf("ttt一: 输入学生信息n"); prin

30、tf("ttt二: 显示学生信息n"); printf("ttt三: 查找学生信息n"); printf("ttt四: 删除学生信息n"); printf("ttt五: 按学号排序信息n"); printf("ttt六: 退出程序n"); fflush(stdin); /shuru(); printf("ttt请输入功能选项:"); scanf("%d",&change); switch(change) case 1:shuru(); break;

31、 case 2: xianshi(); break; case 3: printf("请输入您的学号或姓名,输入姓名请按1,输入学号请按2。(输入后按enter键)n"); printf("输入选择: "); scanf("%d",&n); getchar();switch(n)case 1:chaxingming(); break;case 2:chaxuehao();break;break; case 4: shanchu(); break; case 5: paixu(); break; case 6: break; g

32、etch(); while(change!=6);程序运行结果进入界面:先输入学生信息输入一个学生的信息后,界面出现“是否继续输入另一学生的信息”的判断将学生信息输入完毕后,enter,进入学生信息管理功能选项界面:选择功能2:显示学生信息选择功能3,进入查找学生功能模块:1) .按姓名查找:a当不与其他学生重名时:b.与其他学生重名时:当与其他学生重名时,按学号查询信息选择功能4,进入删除学生功能模块:删除完成后,再次显示学生排序:选择功能5,进入排序功能:编程中遇到的困难及解决方法这个题目拿到的时候脑中立刻浮现出一个清晰的界面思路,但是在调试程序仍然遇到许多问题:1. 在设计学生信息数据的

33、结构体过程中,其出生年月一开始以另以结构体的形式输入,但是这样一来在后续的表达中比较麻烦,于是及时将学生出生年月分别以单独的学生结构体成员名的形式表达:sti.year,sti.month。2. 信息录入过程中由于一次只能录入一个学生信息,不能实现题目要求,因此在此基础上需要一个循环体来实现重复操作,因此加上一个do while 语句,判断时输入y便继续当前功能模块运行,输入n即便结束当前模块运行返回信息管理功能界面。这在下面的各个功能模块中都以同一原理进行编写操作。3. 如何实现在界面功能模块中运行功能后继续运行其他?设计dowhile和for语句,先运行程序,在输入功能选项数字时通过swi

34、tch语句在结束此功能模块后跳出选择体,再判断输入的数字是否满足功能数字再次进行运行。4. 查找功能中一开始只考虑到按学号查找,此时不存在找到多个学生的问题,但是查找学生还可以通过姓名查找,此时就存在重名问题:在按姓名查找功能模块后,将所查学生姓名存入数组name中,赋值i=0,通过for语句循环,若strcmp(,name)=0,则k自增,当循环体结束时,若k=0,则直接输出学生信息,若k>1,则按学号查找。5. 在排序过程中,一开始通过学号排序,运行结果确实将学号从小到大排序,但是仔细一看却发现只有学号排序,学生信息已与原来的不匹配:在学生结构建立时另建立studen

35、t1的空结构体,作为将每次循环中学生信息临时存储空间,从而实现学生所有信息在排序时与其学号捆绑在一起。课程论文题目高考招生录取程序程序设计思路高考招生录取程序已知文本文件f1.txt中存放了某个省当年参加高考的1000个考生的数据(考号、姓名、性别和考试成绩),存放格式是每行存放一个考生的数据,每个数据之间用空格隔开。假定当年该省的招生计划是:一类本科招生计划为10;二类本科招生计划为15;三类本科招生计划为20;四类高职高专招生计划为25。请编写程序,实现以下功能:(1)划定各批次录取分数线,结果可屏幕显示,也可存入文件。(2)能够统计各批次中男生,女生的录取比例。统计结果可屏幕显示,也可存

36、入文件。(3)确定每名学生的录取情况及录取批次。(4)考生可以根据考号或姓名(支持重名)查询自己的成绩及录取情况;说明: 统程序要有界面存入文件的数据,每行存一种数据,每行之间的不同信息用空格分隔。这个程序相对于学生信息管理新增了文件的模块,而且思路几乎与学生信息管理一致。根据以上要求,设计程序时需要用到多个调用函数来实现各个功能,因此在main函数中通过fopen语句打开考生信息文件并读取,接着打开写文件再通过switch语句来实现进入并运行各个功能模块。在程序功能设计之前,将考生信息以结构体的形式存入;在各功能模块中,通过if、for语句来实现判断、循环功能,实现显示、查询等功能。功能模块

37、图高考信息查询系统读取文件中考生信息打开“各批次录取分数线”文件,并将分数线写入文件进入查询系统选项打开“各批次男女比例”文件,并将比例写入文件显示一本考生信息按姓名查询考生信息按考好查询考生信息数据结构设计题目中考生信息包括:考号,姓名,年龄,性别,分数,在程序中可以通过设计考生信息的结构体来实现考生信息的读取;再考虑到考生数量的大小,我通过建立一个数组来表示各个考生。算法设计高考信息查询系统读取文件中考生信息打开“各批次录取分数线”文件,并将分数线写入文件进入查询系统选项打开“各批次男女比例”文件,并将比例写入文件输入“1”输入“3”输入“2”显示一本考生信息按姓名查询考生信息按考好查询考

38、生信息程序代码#include<stdio.h>#include<string.h>struct student int num; char name20; char sex10; int score;student1;struct student stu1000;void reorder(struct student *st,int n);void fenshuxian();void bili(struct student stu1000);void function1();void function2();void function3();void function

39、4();void function5();void main() int i,n;char q; file *fp; if(fp=fopen("f1.txt","r")=null)printf("cannot open filen");return; for(i=0;i<1000;i+) fscanf(fp,"%d%s%s%d",&stui.num,, stui.sex,&stui.score); fclose(fp); reorder(stu,1000); function

40、3(); function4(); printf(" 欢迎进入高考录取查询系统nn"); fenshuxian(); bili(stu); do printf("请输入您的考号或姓名,输入考号请按1,输入姓名请按2,显示一本考生请按3。(输入后按enter键)n 请输入选择:"); scanf("%d",&n); getchar();switch(n)case 1:function1();break; case 2:function2();break;case 3:function5();break; getchar(); w

41、hile(n!=3); void fenshuxian() /划定分数线printf("各批次录取分数线:n");printf("一本线:%dn",stu99.score);printf("二本线:%dn",stu249.score);printf("三本线:%dn",stu449.score);printf("高职 :%dnn",stu649.score);void bili(struct student stu) /统计各批次男女比例 int i; file *fp; int male1,m

42、ale2,male3,male4; int female1,female2,female3,female4; male1=0,male2=0 ,male3=0,male4=0,female1=0,female2=0,female3=0,female4=0; for(i=0;i<100;i+) if(strcmp(stui.sex,"男")=0) male1+;else female1+; printf("各批次男女比例:n"); printf("一本男女比例:%d:%dn",male1,female1); for(i=100;i

43、<250;i+) if(strcmp(stui.sex,"男")=0) male2+; else female2+; printf("二本男女比例:%d:%dn",male2,female2); for(i=250;i<450;i+) if(strcmp(stui.sex,"男")=0) male3+;else female3+; printf("三本男女比例:%d:%dn",male3,female3); for(i=450;i<700;i+) if(strcmp(stui.sex,"

44、男")=0) male4+;else female4+; printf("高职男女比例:%d:%dnn",male4,female4); if(fp=fopen("各批次男女比例.txt","w")=null) /将各批次男女比例写入文件printf("cannot open filen");return;fprintf(fp,"各批次男女比例:n一本男女比例:%d:%dn二本男女比例:%d:%dn三本男女比例:%d:%dn高职男女比例:%d:%dn",male1,female1,ma

45、le2,female2,male3,female3,male4,female4); void reorder(struct student *st,int n) /排序int i,j;struct student t; for(i=0;i<n-1;i+) for(j=i+1;j<n;j+) if(st+i)->score<(st+j)->score) t=*(st+i); *(st+i)=*(st+j);*(st+j)=t; void function1() /根据考号查询 int i; printf("请输入考号:"); scanf(&quo

46、t;%d",&student1.num); for(i=0;i<1000;i+) if(student1.num=stui.num) printf(" 查询结果n"); printf("n 考号 姓名 性别 分数 录取结果n"); printf(" %d %s %s %d ",stui.num,,stui.sex,stui.score);if(i<100) printf(" 一本n"); else if(i<250 && i>99) pri

47、ntf(" 二本n");else if(i<450 && i>249) printf(" 三本n");else if(i<650 && i>449) printf(" 高职n");else if(i>649 && i<1000) printf(" 未被录取n"); break; if(i>=1000) printf("n 考号输入错误n"); void function2() /根据姓名查询 int i,k

48、; k=0; /用k来反映该生姓名是否重名 printf("请输入姓名:"); scanf("%s",&); for(i=0;i<1000;i+) if(strcmp(,)=0) /检索该姓名人数 k+; if(k>1) /k>1,重名 printf(" 因您与某同学重名,请输入考号查询n"); function1(); /调用考号查询函数 else /不重名情况 for(i=0;i<1000;i+) if(strcmp(,)=0) printf("n 查询结果n"); printf("n 考号 姓名 性别 分数 录取结果n"); printf("

温馨提示

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

最新文档

评论

0/150

提交评论