学生学籍信息管理系统.doc
C语言课程设计综合实习报告题目:学籍信息管理系统 姓名: 黄凯 学号:20081000153班级号: 052081 院(系):工程学院专业: 土木工程 指导教师: 曹弘 一 ,题目要求1. 学生学籍信息管理系统设计 要求 使用下面的数据设计一个简单的学籍管理系统。 学生基本信息文件(A.TXT)极其内容: 学号 姓名 性别 宿舍号码 电话号码 01 张成成 男 501 87732111 02 李成华 女 101 87723112 03 王成凤 女 101 87723112 04 张明明 男 502 87734333 05 陈东 男 501 87732111 06 李果 男 502 87734333 07 张园园 女 102 87756112 学生成绩基本信息文件(B.TXT)极其内容: . 学号 课程编号 课程名称 学分平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 01 A01 大学物理 3 66 78 82 02 B03 高等数学 4 78 -1 90 01 B03 高等数学 4 45 -1 88 02 C01 VF 3 65 76 66 . 功能要求极其说明: (1)数据录入功能:录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、实得学分根据条件自动运算。 综合成绩的计算: a.如果本课程的实验成绩为-1,则表无实验成绩,综合成绩=平时成绩*30%+卷面成绩*70% b.如果实验成绩不为-1,表示本课程有实验成绩,综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70% 实得学分的计算:采用等级学分制。 综合成绩在90100之间,应得学分=学分*100% 综合成绩在8090之间,应得学分=学分*80% 综合成绩在7080之间,应得学分=学分*75% 综合成绩在6070之间,应得学分=学分*60% 综合成绩在60分以下,应得学分=学分*0% (2)查询功能:分为学生基本情况查询和成绩查询两种 学生基本情况查询: 输入一个学号或姓名(可实现选择)查出此学生的基本信息并显示输出。 输入一个宿舍号码,可查出本室所有学生的基本信息并显示输出。 称号查询: 输入一个学号时,查出此学生所有课程情况,格式如下: 学号:XX 课程名称:XXXX综合成绩:XX实得学分:XXX . 共修:X科,实得总分为:XXX (3)删除功能:当在A.TXT中删除一个学生时,自动地在B.TXT中删除此学生所有信息。 (4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。 提示 数据结构采用结构体数组,提供学生基本信息和学生成绩基本信息结构体数组。二 ,需求分析 根据题目要求,该程序应具备的功能有:(1)数据录入功能:录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、实得学分根据条件自动运算。(2)查询功能:分为学生基本情况查询和成绩查询两种(3)删除功能:当在A.TXT中删除一个学生时,自动地在B.TXT中删除此学生所有信息。(4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。三, 程序总体设计学生学籍信息管理系统MENU(菜单)退出排序功能模块删除功能模块查询功能模块数据录入功能模块按学分降序排列按综合成绩降序排列按综合成绩升序排列按学分升序排列查询功能模块查询功能模块退出四, 程序详细设计主函数主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。流程图 程序void main()while(1) printf("n<<<<<<<<<<<<<<welcome to use student manage>>>>>>>>>>>>>>>>>nn"); printf("* = * n"); printf("* 1>input 2>cha zhao * n"); printf("* 3>delete 4>paixu xianshi * n"); printf("* 5>exit * n"); printf("* * n"); printf("* - * n"); printf(" Please input which you want(1-5):"); ch=getch(); switch(ch) case '1':input();break; case '2':search(); getch();break; case '3':delete();getch(); break; case '4':sort(); getch();break; case '5':exit(0); default: continue; 个功能模块设计数据录入。数据结构 我们需要录入的信息数据有两类:一类是学生基本信息,包括学号,学号 姓名 性别 宿舍号码 电话号码,存放在文件S_INFO.TXT中。另一类信息是学生成绩基本信息,包括学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、实得学分根据条件自动运算。 这些信息存放在文件S_SCORE.TXT中。学生基本信息的存放格式为:struct info int sMingci; /名次char xuehao8; char name10; char sex2;char d_num4;/宿舍号码char tel_num9; /宿舍电话号码data,s_info100;成绩基本信息的存放格式为:struct coursechar xuehao8; char course_No6; /课程代号 char course_name10;/课程名字 float xuefen;/学分 float p_chengji; /平时成绩 float s_chengji;/实验成绩 float j_chengji;/卷面成绩 float z_chengji;/综合成绩 float s_xuefen;/实际学分course_data,s_course100; 需求分析数据录入模块的功能是用户通过输入选项在基本信息和成绩信息的输入之间进行选择。程序void input() while(1)printf("nwhich information do you want to input: b(base) s(socre) e(exit)");ch=getch(); if(ch='b'|ch='B') if(fp=fopen("s_info.txt","at+")=NULL) printf("cannot open this file.n"); getch();exit(0); printf("nPlease input xuehao:"); gets(sn);while(fread(&data,sizeof(data),1,fp)=1) if(strcmp(sn,data.xuehao)=0)flag=1;if(flag=1)printf("n the number has exist,press ang key continue:n");flag=0;getch();continue;elsestrcpy(data.xuehao,sn); printf("Please input name:"); gets(data.name); printf("Please input sex:M(male)/F(female):n"); gets(data.sex);printf("Please input your dormitory No:"); gets(data.d_num);printf("Please input telephone Number:"); gets(data.tel_num);fwrite(&data,sizeof(data),1,fp); /写入数据fclose(fp); /ifelse if(ch='s'|ch='S') if(fp1=fopen("s_score.txt","at+")=NULL|(fp=fopen("s_info.txt","rt")=NULL) printf("cannot open this file.n"); getch();exit(0); printf("nPlease input xuehao:"); gets(sn);while(fread(&data,sizeof(data),1,fp)=1) if(strcmp(sn,data.xuehao)=0)flag=1;if(!flag)printf("nthis number is not existn");continue;else flag=0;strcpy(course_data.xuehao,sn);printf("nPlease input course No:"); gets(course_data.course_No);printf("nPlease input course name:"); gets(course_data.course_name);printf("nPlease input course xuefeng:"); gets(temp);course_data.xuefen=atof(temp);printf("nPlease input pingshi chengji:"); gets(temp);course_data.p_chengji=atof(temp);printf("nPlease input shiyan chengji:"); gets(temp);course_data.s_chengji=atof(temp);printf("nPlease input juanmian chengji:"); gets(temp);course_data.j_chengji=atof(temp);/以下是综合成绩计算if(course_data.s_chengji=-1) /如果有实验 course_data.z_chengji=(course_data.p_chengji)*0.3+(course_data.j_chengji)*0.7;else /如果无实验course_data.z_chengji=(course_data.p_chengji)*0.15+(course_data.s_chengji)*0.15+(course_data.j_chengji)*0.7;/以下是实际学分计算 if(course_data.z_chengji)<60) course_data.s_xuefen=0; else if(course_data.z_chengji)<70) course_data.s_xuefen=course_data.xuefen*0.6; else if(course_data.z_chengji)<80) course_data.s_xuefen=course_data.xuefen*0.75; else if(course_data.z_chengji)<90) course_data.s_xuefen=course_data.xuefen*0.8; else course_data.s_xuefen=course_data.xuefen; fwrite(&course_data,sizeof(course_data),1,fp1); /写入数据fclose(fp1);fclose(fp);/else ifelsebreak; printf("another?y/n"); ch=getch(); if(ch='n'|ch='N')break;/input查询功能模块。需求分析该模块的功能分为学生基本情况查询和成绩查询两种。学生基本情况查询是根据输入的学号或姓名查出此学生的基本信息并显示输出;或者根据输入的宿舍号码,查出本室所有学生的基本信息并显示输出。成绩查询的功能是根据输入的学号,查出此学生的所有课程情况。 流程图选择基本信息查询还是成绩查询b/Ba/A学生成绩查询学生基本情况查询输入学号选择根据学号,姓名,宿舍号码查找是否找到信息根据选择,输入学号/姓名/宿舍号码是否找到信息提示没找到,按任意键继续显示找到的信息提示没找到,按任意键继续显示找到的信息 程序void search() printf("n select form: a(student information) b(socre information)"); ch=getch(); if(ch='a'|ch='A') if(fp=fopen("s_info.txt","rt")=NULL) printf("nCannot open this file.n"); exit(0);printf("nselectway: a(student Number) b(student name) c(dormitory NO):n");ch1=getch(); /按照学号查找 if(ch1='a'|ch1='A') printf("nplease input the student number:"); gets(temp_NO); printf(" xuehao name sex sushe hao telephone ");printf("n-n");while(fread(&data,sizeof(data),1,fp)=1) if(strcmp(temp_NO,data.xuehao)=0)flag=1;printf("n%8s%10s%12s%14s%20sn",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);if(!flag)printf("nthis number is not exist,press any key to continuen");getch();elseflag=0;/按照名字查找else if(ch1='b'|ch1='B') printf("nplease input the name:"); gets(temp_name); printf(" xuehao name sex sushe hao telephone ");printf("n-n"); while(fread(&data,sizeof(data),1,fp)=1) if(strcmp(temp_name,data.name)=0)flag=1;printf("n%8s%10s%12s%14s%20sn",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);if(!flag)printf("nthis name is not exist,press any key to continue:n");getch();elseflag=0; /按照宿舍号码查找 else if(ch1='c'|ch1='C') printf("nplease input the dormitory number:"); gets(temp_dnum); printf(" xuehao name sex sushe hao telephone ");printf("n-n");while(fread(&data,sizeof(data),1,fp)=1) if(strcmp(temp_dnum,data.d_num)=0)flag=1;printf("n%8s%10s%12s%14s%20sn",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);if(!flag)printf("this dormitory is not exist,press any key continue:");getch();elseflag=0; else printf("nselect errorn"); fclose(fp); /ch if /学生成绩查找 else if(ch='b'|ch='B') j=0; z_fen=0; z_xuefen=0; if(fp1=fopen("s_score.txt","rt")=NULL) printf("nCannot open this file.n"); exit(0);printf("nplease input student number:");gets(temp_NO);printf(" xuehao course_No course_name xuefen chengji ");printf("n-n"); while(fread(&course_data,sizeof(course_data),1,fp1)=1) if(strcmp(temp_NO,course_data.xuehao)=0)flag=1;j+;z_fen=z_fen+course_data.z_chengji;z_xuefen=z_xuefen+course_data.s_xuefen;printf("n%10s%10s%10s%15.1f %18.1fn",course_data.xuehao,course_data.course_No,course_data.course_name,course_data.s_xuefen,course_data.z_chengji);if(!flag)printf(" is not exist");elseflag=0;printf("n-n");printf(" z_gong:%3d ke z_xuefen:%3.1f z_cheng ji:%6.1f",j,z_xuefen,z_fen); else printf("error "); fclose(fp1);删除功能模块。需求分析该模块的功能是当在学生基本信息文件中删除一个学生时,自动在成绩信息文件中删除此人的所有信息。 程序void delete()printf("ninput the number of student you want to delete:");gets(temp_NO);if(fp1=fopen("s_score.txt","rt")=NULL|(fp=fopen("s_info.txt","rt")=NULL|(fp2=fopen("temp.txt","wt+")=NULL) printf("cannot open this file.n"); getch();exit(0); while(fread(&data,sizeof(data),1,fp)=1)if(strcmp(temp_NO,data.xuehao)!=0)fwrite(&data,sizeof(data),1,fp2);remove("s_info.txt"); rename("temp.txt","s_info.txt");fclose(fp);fclose(fp2);if(fp1=fopen("s_score.txt","rt")=NULL|(fp2=fopen("temp.txt","wt+")=NULL) printf("cannot open this file.n"); getch();exit(0); while(fread(&course_data,sizeof(course_data),1,fp1)=1)if(strcmp(temp_NO,course_data.xuehao)!=0)fwrite(&course_data,sizeof(course_data),1,fp2);remove("s_score.txt"); rename("temp.txt","s_score.txt");fclose(fp1);fclose(fp2);printf("n delete successful");排序功能模块。需求分析 该模块的功能是能实现选择根据综合成绩或实得学分升序或降序排序显示数据。流程图输入要排序的课程名称是否找到该课程YN选择排序根据:根据学分还是综合成绩提示没找到退出选择排序方法:升序还是降序根据选择对数据进行排序显示 程序void sort()printf("nplease input course number:");gets(tempcn); if(fp1=fopen("s_score.txt","rt")=NULL) printf("cannot open this file.n"); getch();exit(0); i=0;while(fread(&course_data,sizeof(course_data),1,fp1)=1)if(strcmp(tempcn,course_data.course_No)=0)s_coursei=course_data;i+;flag=1;if(!flag)printf("nno such coursen");elseflag=0; printf("nplease select way : a(xuefen) b(zhong he cheng ji)n"); ch=getch(); printf("nselect: s(sheng xu) j(jiang xu)"); ch1=getch(); if(ch='a'|ch='A') /升序排列 if(ch1='s') for(j=0;j<i-1;j+) for(k=j;k<i;k+) if(s_coursej.s_xuefen>s_coursek.s_xuefen) temp_course=s_coursej; s_coursej=s_coursek; s_coursek=temp_course; printf("nnxuehao course_number course_name xuefen chengjin"); printf("n-n"); for(j=0;j<i;j+) printf("n%6s%10s%16s%13.1f%13.1fn",s_coursej.xuehao,s_coursej.course_No,s_coursej.course_name,s_coursej.s_xuefen,s_coursej.z_chengji); /降序排列 else for(j=0;j<i-1;j+) for(k=j;k<i;k+) if(s_coursej.s_xuefen<s_coursek.s_xuefen) temp_