学生信息管理系统设计

上传人:仙*** 文档编号:37867909 上传时间:2021-11-04 格式:DOC 页数:45 大小:1.10MB
返回 下载 相关 举报
学生信息管理系统设计_第1页
第1页 / 共45页
学生信息管理系统设计_第2页
第2页 / 共45页
学生信息管理系统设计_第3页
第3页 / 共45页
点击查看更多>>
资源描述
中 国 地 质 大 学本科生课程论文封面课程名称 C语言课程设计 教师姓名 武进霞 本科生姓名 _ 本科生学号 本科生专业 资源勘查与工程基地班所在院系 资源学院 类别: 报告 日期: 2010年2月22日 课程论文题目学生信息管理系统设计 程序设计思路学生信息管理系统设计学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:系统以文本菜单方式工作,学生信息录入功能(学生信息最好用文件保存)-输入学生信息浏览功能-输出显示高考一本考生信息查询、排序功能-算法按学号查询按姓名查询学生信息的删除与修改(可选项)根据以上要求,设计程序时需要用到多个调用函数来实现各个功能,因此在main函数中将学生信息录入过后,通过switch语句来实现进入并运行各个功能模块。在程序功能设计之前,将学生信息以结构体的形式存入;在各功能模块中,通过if、for语句来实现判断、循环功能,实现信息浏览、查询、排序等功能。功能模块图学生信息管理系统信息录入信息查询删除某个学生信息将信息按学号排序信息浏览显示一本考生信息按姓名查询按学号查询数据结构设计题目中学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等,在程序中可以通过设计学生信息的结构体来实现学生信息的录用;再考虑到学生数量的大小,我通过建立一个数组来表示各个学生。开始(进入界面)算法设计输入功能选项“1”:继续输入添加学生信息输入学生信息判断是否继续输入信息输入功能选项“2”:显示所有学生信息输入“2”:按学号查找信息输入功能选项“3”:查找学生信息进入功能模块界面输入“1”:按姓名查找信息输入功能选项“4”:输出学生信息结束输入功能选项“5”:按学号排序输入功能选项“6”:退出程序1. main函数(功能界面) void main() int change,n; printf(=学生信息管理系统=n); printf(ttt 请输入学生信息n); shuru(); do system(cls); printf(=学生信息管理系统=n); printf(ttt一: 输入学生信息n); printf(ttt二: 显示学生信息n); printf(ttt三: 查找学生信息n); printf(ttt四: 删除学生信息n); printf(ttt五: 按学号排序信息n); printf(ttt六: 退出程序n); fflush(stdin); printf(ttt请输入功能选项:); scanf(%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;break; 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(sti.name); printf(n请输入年龄:); scanf(%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(%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;ji;j+) printf(学号t%dnn姓名t%snn年龄t%dnn性别t%snn出生年月t%dnn电话号码t%dnn地址t%snnemailt%snn,stj.id,stj.name,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=50) printf(ntt没有找到这个学生!n); else printf(学号t%dn姓名t%sn年龄t%dn性别t%sn出生年月t%dn电话号码t%dn地址t%snemailt%sn,sta.id,sta.name,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,&name); for(m=0;m1) /k1,重名 printf( 因您与某同学重名,请输入考号查询n); chaxuehao(); /调用学号查询函数 else / 不重名情况 for(m=0;m50) printf(ntt没有找到这个学生!n); else printf(学生t%dn姓名t%sn年龄t%dn性别t%sn出生年月t%dn电话号码t%dn地址t%snemailt%sn,stm.id,stm.name,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); scanf(%d,&number); for(p=0;pi;p+) if(stp.id=number) break; for(number=p;numberi) printf(tt没有找到这个学生!n); else i-; xianshi(); printf(n是否继续删除另一个学员信息?(y/n) ); fflush(stdin); c=getchar(); while(c=y);6. 排序void paixu() /按学号从大到小排序 int j,k,id1,age1,birthday1,phone1; char name110,sex13,address1100,email1100; for(j=0;ji;j+) for(k=0;kstk+1.id) id1=stk.id; stk.id=stk+1.id; stk+1.id=id1; strcpy(name1,stk.name);/name1=stk.name;strcpy() strcpy(stk.name,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=birthday1;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(); 程序代码#include#include#include#includestruct studentint id;char name10;int age;char 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(sti.name); printf(n请输入年龄:); scanf(%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(%s,&sti.address); 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;ji;j+) printf(学号t%dnn姓名t%snn年龄t%dnn性别t%snn出生年月t%dnn电话号码t%dnn地址t%snnemailt%snn,stj.id,stj.name,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;ji;j+) for(k=0;kstk+1.id) id1=stk.id; stk.id=stk+1.id; stk+1.id=id1; strcpy(name1,stk.name);/name1=stk.name;strcpy() strcpy(stk.name,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=birthday1;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; char c; do printf(n请输入想查找的学生学号:); fflush(stdin); scanf(%d,&num); for(a=0;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.name,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,&name); for(m=0;m1) /k1,重名 printf( 因您与某同学重名,请输入考号查询n); chaxuehao(); /调用学号查询函数 else /不重名情况 for(m=0;m50) printf(ntt没有找到这个学生!n); else printf(学生t%dn姓名t%sn年龄t%dn性别t%sn出生年月t%dn电话号码t%dn地址t%snemailt%sn,stm.id,stm.name,stm.age,stm.sex,stm.birthday,stm.phone,stm.address,stm.email); printf(n是否查找另一个学生的信息?(y/n); fflush(stdin); b=getchar(); while(b=y);void shanchu() /删除学生信息 int p,number; char c; do printf(n请输入要删除的学生学号:n); fflush(stdin); scanf(%d,&number); for(p=0;pi;p+) if(stp.id=number) break; for(number=p;numberi) printf(tt没有找到这个学生!n); else i-; xianshi(); 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); printf(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; 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; getch(); while(change!=6);程序运行结果进入界面:先输入学生信息输入一个学生的信息后,界面出现“是否继续输入另一学生的信息”的判断将学生信息输入完毕后,enter,进入学生信息管理功能选项界面:选择功能2:显示学生信息选择功能3,进入查找学生功能模块:1) .按姓名查找:A当不与其他学生重名时:B.与其他学生重名时:当与其他学生重名时,按学号查询信息选择功能4,进入删除学生功能模块:删除完成后,再次显示学生排序:选择功能5,进入排序功能:编程中遇到的困难及解决方法这个题目拿到的时候脑中立刻浮现出一个清晰的界面思路,但是在调试程序仍然遇到许多问题:1. 在设计学生信息数据的结构体过程中,其出生年月一开始以另以结构体的形式输入,但是这样一来在后续的表达中比较麻烦,于是及时将学生出生年月分别以单独的学生结构体成员名的形式表达:sti.year,sti.month。2. 信息录入过程中由于一次只能录入一个学生信息,不能实现题目要求,因此在此基础上需要一个循环体来实现重复操作,因此加上一个do while 语句,判断时输入y便继续当前功能模块运行,输入n即便结束当前模块运行返回信息管理功能界面。这在下面的各个功能模块中都以同一原理进行编写操作。3. 如何实现在界面功能模块中运行功能后继续运行其他?设计dowhile和for语句,先运行程序,在输入功能选项数字时通过switch语句在结束此功能模块后跳出选择体,再判断输入的数字是否满足功能数字再次进行运行。4. 查找功能中一开始只考虑到按学号查找,此时不存在找到多个学生的问题,但是查找学生还可以通过姓名查找,此时就存在重名问题:在按姓名查找功能模块后,将所查学生姓名存入数组name中,赋值i=0,通过for语句循环,若strcmp(stm.name,name)=0,则k自增,当循环体结束时,若k=0,则直接输出学生信息,若k1,则按学号查找。5. 在排序过程中,一开始通过学号排序,运行结果确实将学号从小到大排序,但是仔细一看却发现只有学号排序,学生信息已与原来的不匹配:在学生结构建立时另建立student1的空结构体,作为将每次循环中学生信息临时存储空间,从而实现学生所有信息在排序时与其学号捆绑在一起。课程论文题目高考招生录取程序程序设计思路高考招生录取程序已知文本文件f1.txt中存放了某个省当年参加高考的1000个考生的数据(考号、姓名、性别和考试成绩),存放格式是每行存放一个考生的数据,每个数据之间用空格隔开。假定当年该省的招生计划是:一类本科招生计划为10;二类本科招生计划为15;三类本科招生计划为20;四类高职高专招生计划为25。请编写程序,实现以下功能:(1)划定各批次录取分数线,结果可屏幕显示,也可存入文件。(2)能够统计各批次中男生,女生的录取比例。统计结果可屏幕显示,也可存入文件。(3)确定每名学生的录取情况及录取批次。(4)考生可以根据考号或姓名(支持重名)查询自己的成绩及录取情况;说明: 统程序要有界面存入文件的数据,每行存一种数据,每行之间的不同信息用空格分隔。这个程序相对于学生信息管理新增了文件的模块,而且思路几乎与学生信息管理一致。根据以上要求,设计程序时需要用到多个调用函数来实现各个功能,因此在main函数中通过fopen语句打开考生信息文件并读取,接着打开写文件再通过switch语句来实现进入并运行各个功能模块。在程序功能设计之前,将考生信息以结构体的形式存入;在各功能模块中,通过if、for语句来实现判断、循环功能,实现显示、查询等功能。功能模块图高考信息查询系统读取文件中考生信息打开“各批次录取分数线”文件,并将分数线写入文件进入查询系统选项打开“各批次男女比例”文件,并将比例写入文件显示一本考生信息按姓名查询考生信息按考好查询考生信息数据结构设计题目中考生信息包括:考号,姓名,年龄,性别,分数,在程序中可以通过设计考生信息的结构体来实现考生信息的读取;再考虑到考生数量的大小,我通过建立一个数组来表示各个考生。算法设计高考信息查询系统读取文件中考生信息打开“各批次录取分数线”文件,并将分数线写入文件进入查询系统选项打开“各批次男女比例”文件,并将比例写入文件输入“1”输入“3”输入“2”显示一本考生信息按姓名查询考生信息按考好查询考生信息程序代码#include#includestruct 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 function4();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;i1000;i+) fscanf(fp,%d%s%s%d,&stui.num,stui.name, stui.sex,&stui.score); fclose(fp); Reorder(stu,1000); function3(); 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(); while(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,male2,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;i100;i+) if(strcmp(stui.sex,男)=0) male1+;else female1+; printf(各批次男女比例:n); printf(一本男女比例:%d:%dn,male1,female1); for(i=100;i250;i+) if(strcmp(stui.sex,男)=0) male2+; else female2+; printf(二本男女比例:%d:%dn,male2,female2); for(i=250;i450;i+) if(strcmp(stui.sex,男)=0) male3+;else female3+; printf(三本男女比例:%d:%dn,male3,female3); for(i=450;i700;i+) if(strcmp(stui.sex,男)=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,male2,female2,male3,female3,male4,female4); void Reorder(struct student *st,int n) /排序int i,j;struct student t; for(i=0;in-1;i+) for(j=i+1;jscorescore) t=*(st+i); *(st+i)=*(st+j);*(st+j)=t; void function1() /根据考号查询 int i; printf(请输入考号:); scanf(%d,&student1.num); for(i=0;i1000;i+) if(student1.num=stui.num) printf( 查询结果n); printf(n 考号 姓名 性别 分数 录取结果n); printf( %d %s %s %d ,stui.num,stui.name,stui.sex,stui.score);if(i100) printf( 一本n); else if(i99) printf( 二本n);else if(i249) printf( 三本n);else if(i449) printf( 高职n);else if(i649 & i=1000) printf(n 考号输入错误n); void function2() /根据姓名查询 int i,k; k=0; /用k来反映该生姓名是否重名 printf(请输入姓名:); scanf(%s,&student1.name); for(i=0;i1) /k1,重名 printf( 因您与某同学重名,请输入考号查询n); function1(); /调用考号查询函数 else /不重名情况 for(i=0;i1000;i+) if(strcmp(stui.name,student1.name)=0) printf(n 查询结果n); printf(n 考号 姓名 性别 分数 录取结果n); printf( %d %s %s %d ,stui.num,stui.name,stui.sex,stui.score); if(i100) printf(一本n); else if(i99) printf( 二本n); else if(i249) printf( 三本n); else if(i449) printf( 高职n); else if(i649 & i1000) printf( 未被录取n); if(k=0) printf(n 姓名输入错误n); void function3() /将高考成绩排名存入文件int i;FILE *fp; if(fp=fopen(高考成绩排名.txt,w)=NULL)printf(cannot open filen);return;for(i=0;i1000;i+)fprintf(fp,%d %d %s %s %dn,i+1,stui.num,stui.name,stui.sex,stui.score); /*用i+1显示排名情况*/ void function4() /将各批次分数线存入文件 FILE *fp; if(fp=fopen(各批次分数线.txt,w)=NULL)printf(cannot open filen);return;fprintf(fp,各批次录取分数线:n一本线:%dn二本线:%dn三本线:%dn高职 :%dn,stu99.score,stu249.score,stu449.score,stu649.score); void function5()int p;for(p=0;p100;p+)printf(n 考号 姓名 性别 分数 录取结果n); printf( %d %s %s %d ,stup.num,stup.name,stup.sex,stup.score);程序运行结果1.进入程序界面:2.进入按考号查分功能模块:6. 进入按姓名查询功能界面:7. 显示一本考生信息5.生成“高考成绩排名”、“各批次分数线”、“各批次男女比例”的txt文件:编程中遇到的困难及解决方法在这个题目中,由于它的查询功能与学生信息管理几乎相同,所以处理起来也挺顺利,只是文件函数中由于不熟练出了一些小错误,但经过查找书本后顺利解决。课程论文题目购房排队程序程序设计思路【要求】假定文本文件a1.txt中的内容是我校南望山庄二期购房报名名单,其中职称0为博导、教授,1为正教授,2为副教授,3为讲师,4为助教。请编程完成排名顺序。排队原则为首先按照职称排序,职称高者排前面,如职称一样的情况下按工龄排,工龄一样的情况下按年龄排,以此类推。将排序后的名单存入另外一个文本文件中,假设为a2.txt。另假定此次房源只有200套,请将前200名存入a3.txt文件中。根据要求要读写文件,因此必须有文件语句,这在高考查询系统已经运用过,另外重要的是排序,将排好序的教师信息重新存入新的文件。因此在这个题中我采用了形参与实参,运用了返回值来得到相应结果。排序功能模块图打开a1.txt文件,输出教师信息对教师排序将教师信息写入a2.txt文件取前两百名教师信息写入a
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!