C课程设计报告学籍信息管理系统.docx
- 文档编号:24022944
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:39
- 大小:147.52KB
C课程设计报告学籍信息管理系统.docx
《C课程设计报告学籍信息管理系统.docx》由会员分享,可在线阅读,更多相关《C课程设计报告学籍信息管理系统.docx(39页珍藏版)》请在冰豆网上搜索。
C课程设计报告学籍信息管理系统
C课程设计实验报告
班号:
191073-03
一、课程设计题目要求:
【要求】:
使用下面的数据,设计一个简单的学籍信息管理系统。
学生基本信息文件(A.TXT)及其内容:
A.TXT文件不需要编程录入数据,可用文本编辑工具直接生成
学号姓名性别宿舍号码电话号码01张成成男501**********李成华女101**********王成凤女101********04张明明男502********05陈东男501********06李果男502********07张园园女102********
学生成绩基本信息文件(B.TXT)及其内容
学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩学分
01A01大学物理3667882
02B03高等数学478-190
01B03高等数学445-188
02C01VF3657666
功能要求及说明:
(1)数据录入功能:
对B.TXT进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据.综合成绩、学分由程序根据条件自动运算。
(2)综合成绩的计算:
如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%;如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70%。
实综合成绩在90-100之间,应得学分=学分*100%得学分的计算:
采用等级学分制.
综合成绩在80-90之间,应得学分=学分*80%
综合成绩在70-80之间,应得学分=学分*75%
综合成绩在60-70之间,应得学分=学分*60%
综合成绩在60以下,应得学分=学分*0%
(2)查询功能:
分为学生基本情况查询和成绩查询两种
A:
学生基本情况查询:
A1----输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。
A2---输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。
B:
成绩查询:
B1:
输入一个学号时,查询出此生的所有课程情况,格式如下:
学号:
xx姓名:
xxxxx
课程编号:
xxx课程名称:
xxxxx综合成绩:
xxxx实得学分:
xx
课程编号:
xxx课程名称:
xxxxx综合成绩:
xxxx实得学分:
xx
课程编号:
xxx课程名称:
xxxxx综合成绩:
xxxx实得学分:
xx
共修:
xx科,实得总学分为:
xxx
(3)删除功能:
当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息。
(4)排序功能:
能实现选择按综合成绩或实得学分升序或降序排序并显示数据
二、总体设计:
经过分析整个系统,可以将系统分为五大模块:
信息输入模块,信息修改模块,信息排序模块,设备查找模块和退出模块。
其中主要是前五大个模块。
学生学籍信息管理系统
三、统详细设计:
1.主函数:
主函数设计的很简洁,只提供输入,功能处理和输出部分的函数的调用,其中各功能模块用菜单方式选择。
//******主函数******
#include
#include
#include
#include
#include
voidmenu()
{
intc,w1;
do
{
puts("\t\t*********************MENU*********************\n\n");
puts("\t\t\t\t1.Inputdata");/*输入模块*/
puts("\t\t\t\t2.Searchdata");/*查找模块*/
puts("\t\t\t\t3.Deletedata");/*删除模块*/
puts("\t\t\t\t4.Sortdata");/*排序模块*/
puts("\t\t\t\t5.Exit");/*退出*/
puts("\n\n\t\t**********************************************\n");
printf("Choicenumber(1-5):
[]\b\b");
scanf("%d",&c);
if(c<1||c>6)
{
w1=1;
getchar();
}
elsew1=0;
}
while(w1==1);
switch(c)
{
case1:
enter();break;
case2:
search();break;
case3:
del();break;
case4:
sort();break;
case5:
exit(0);break;
}
}
voidmain()
{
menu();
}
2、各个公共函数:
所用到的六个公共函数
intload_info()/*A文件加载函数*/
{
inti;
FILE*fp;
if((fp=fopen("A.txt","r"))==NULL)
{
printf("\nCannotopenfile\n");
return0;
}
for(i=0;!
feof(fp);i++)
fscanf(fp,"%s%s%s%s%s",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel);
fclose(fp);
return(i);
}
intsave_info(intn)/*A文件保存函数*/
{
inti;
FILE*fp;
if((fp=fopen("A.txt","w"))==NULL)
{
printf("\nCannotopenfile\n");
return0;
}
for(i=0;i if(strcmp(stu[i].num,"-1")! =0) fprintf(fp,"%s%s%s%s%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel); fclose(fp); } intload_score()/*B文件加载函数*/ { floatca_mark(inti);voidca_score(inti); inti,j; FILE*fp; if((fp=fopen("B.txt","r"))==NULL) { printf("\nCannotopenfile\n"); return0; } for(i=0;! feof(fp);i++) { fscanf(fp,"%s%s%s%d",scr[i].num,scr[i].subnum,scr[i].subject,&scr[i].oscore); for(j=0;j<3;j++) fscanf(fp,"%d",&scr[i].mark[j]); ca_mark(i); ca_score(i); } fclose(fp); return(i); } intsave_score(intm)/*B文件保存函数*/ { inti,j; FILE*fp; if((fp=fopen("B.txt","w"))==NULL) { printf("\nCannotopenfile\n"); return0; } for(i=0;i { if(strcmp(scr[i].num,"-1")! =0) { fprintf(fp,"%s%s%s%d%d%d%d%d%d\n",scr[i].num,scr[i].subnum,scr[i].subject,scr[i].oscore,scr[i].mark[0],scr[i].mark[1],scr[i].mark[2],(int)scr[i].totalmark,(int)scr[i].gscore); } } fclose(fp); } voidprintone(inti)/*显示数据结构项目的函数(公共函数)*/ {printf("\n\t%-4s\t%-6s\t%-4s\t%-8s\t%-8s",stu[i].num,stu[i].name,stu[i].sex,stu[i].room,stu[i].tel); } voidprintface()/*公共函数,一个函数结束时的选择浏览还是返回的函数*/ { printf("\n\t学号\t姓名\t性别\t宿舍号码\t电话号码\n"); } 3.各功能模块的设计: //////*****信息输入模块******///// voidenter()//录入模块 { voidmenu(); n=load_info(); m=load_score(); puts("\nSuccessful! .^_^.\nPressanykeytocontinue..."); getch(); menu(); } /////*******信息查找模块********; voidsearch()//查找菜单 { voidmenu(); intc; puts("\t\t\t\t1.Basicinformation"); puts("\t\t\t\t2.Searchscore"); puts("\t\t\t\t3.Back"); printf("\n\nChoicenumber(1-3): []\b\b"); scanf("%d",&c); switch(c) { case1: search_info();break; case2: search_onescore();break; case3: menu(); } } voidsearch_onescore()//成绩查询 { voidchoice_menu(intk); inti,j=0,flag=0; chars[6];floatsum; printf("\nInputthenumber: "); scanf("%s",s); for(i=0,sum=0;i { if(judge(s,scr[i].num)) { if(j==0) printf("\n\n学号: %-6s\t姓名: %s",s,num_name(s)); printf("\n课程编号: %-6s\t课程名称: %-10s\t综合成绩: %-6.2f\t实得学分: %-4.2f",scr[i].subnum,scr[i].subject,scr[i].totalmark,scr[i].gscore); sum+=scr[i].gscore;flag=1;j++; } } if(flag==1)printf("\n共修: %d科,实得总学分为: %-6.2f\n",j,sum); if(flag==0)puts("\n\nNotexist! \n"); choice_menu(4); } voidsearch_person()//按人查找 { intc; puts("\t\t\t\t1.Bynumber"); puts("\t\t\t\t2.Byname"); puts("\t\t\t\t3.Back"); printf("\n\nChoicenumber(1-3): []\b\b"); scanf("%d",&c); switch(c) { case1: case2: searchone(c);break; case3: search_info(); } } voidchoice_menu(intk) { voidsearch();voidmenu(); voidmenu(); intc,w; puts("\nWhatdoyouwanttodo? : \n"); switch(k) { case1: puts("\n\t1).继续按学号查询");break; case2: puts("\n\t1).继续按姓名查询");break; case3: puts("\n\t1).继续按宿舍号码查询");break; case4: puts("\n\t1).继续查询成绩");break; case5: puts("\n\t1).continue");break; } printf("\t2).Return\n\t3).Backtomenu\n\n\tChoicenumber: []\b\b"); scanf("%d",&c); switch(c) { case1: search_choice(k);break; case2: search();break; case3: menu();break; } } voidsearchroom()//按寝室查询 { voidchoice_menu(intk); inti,flag=0; chars[3]; printf("\nInputtheroomnumber: "); scanf("%s",s); printface(); for(i=0;i if(judge(s,stu[i].room)){printone(i);flag=1;} puts("\n"); if(flag==0) puts("\n\n\tNotexist! \n"); choice_menu(3); } voidsearch_choice(intk){ voiddel(); switch(k) { case1: case2: searchone(k);break; case3: searchroom();break; case4: search_onescore();break; case5: del();break; } } voidsearch_info() { voidsearch_person();voidsearch(); intc; puts("\t\t\t\t1.Byperson"); puts("\t\t\t\t2.Byroom"); puts("\t\t\t\t3.Back"); printf("\n\nChoicenumber(1-3): []\b\b"); scanf("%d",&c); switch(c) { case1: search_person();break; case2: searchroom();break; case3: search(); } } /////*******信息删除模块********; voiddel()//删除模块 { voidmenu(); inti,j,c,flag=0;chars[6]; printface(); for(i=0;i printone(i); puts("\n\n"); printf("\nInputthedeletenumber: "); scanf("%s",s); printf("\n\nSure? \t1).Sure\t2).No\t3).Back\t[]\b\b"); scanf("%d",&c); if(c==1) for(i=0;i if(judge(s,stu[i].num)) { flag=1; strcpy(stu[i].num,"-1"); for(j=0;j if(judge(s,scr[i].num))strcpy(scr[i].num,"-1"); break; } if(flag==0){puts("\n\tNotexist! \n");choice_menu(5);} if(c==2){puts("\n\n");del();} if(c==3){puts("\n\n");menu();} save_info(n); save_score(m); load_info(); load_score(); puts("\n\n\tSuccessfully! .^_^.\n"); choice_menu(5); } /////*******信息排序模块********; voidsort()//排序模块 { voidmenu(); intc,k,v; printf("\n\nChoicenumber: 1).综合成绩\t2).实得学分\t[]\b\b"); scanf("%d",&c); list_subject(); scanf("%d",&k); printf("\n\nChoice: 1).从高到低\t2).从低到高\t[]\b\b"); scanf("%d",&v); sortmark(c,k,v); } voidsortmark(intc,intk,intv) { char*num_name(chars[]); intjudge(chara[],charb[]);chars[4]; inti,j=0,i1,j1,k1;structscore*p[100],*t; switch(k) { case1: strcpy(s,"A01");break; case2: strcpy(s,"B03");break; case3: strcpy(s,"C01");break; case4: strcpy(s,"D02");break; } for(i=0;i for(i=0;i if(judge(s,scr[i].subnum)){p[i]=&scr[i];j++;} for(i1=0;i1 { k1=i1; if(c==1) for(j1=i1+1;j1 totalmark)k1=j1; if(c==2) for(j1=i1+1;j1 gscore)k1=j1; if(i1! =k1){t=p[i1];p[i1]=p[k1];p[k1]=t;} } puts("\n名次姓名\t平时成绩实验成绩卷面成绩综合成绩实得学分"); if(v==1) for(i=0;i printf("%-4d%-8s&%-8d%-8d%-8d%-8.2f%-4.2f",i+1,num_name(p[i]->num),p[i]->mark[0],p[i]->mark[1],p[i]->mark[2],p[i]->totalmark,p[i]->gscore); if(v==2) for(i=j-1;i>=0;i++) printf("%-4d%-8s&%-8d%-8d%-8d%-8.2f%-4.2f",i+1,num_name(p[i]->num),p[i]->mark[0],p[i]->mark[1],p[i]->mark[2],p[i]->totalmark,p[i]->gscore); } 【测试】: 一、主函数: 二、输入模块: 三、查询模块 四、排序模块 五、删除模块 六、退出 【总结】 该程序中没有很特殊的算法,并且其中一部分是参照前面练习中用到的方法,但是程序主要还是经过自己细致的思考才完成的。 很多算法简单明了,直观易懂,应该说是非常平凡的一种。 在程序中我自己认为的亮点是对于查询模块的处理,从总体来看还是做得比较全面的,每次进行判断都可以返回上一次任务,而不用返回主菜单,这样节省了时间。 纵观整个程序,我觉得主要有一点不足: 就是对于排序功能这一模块还是有些问题,运行时会出现内存不足的现象,我想这可能是我的程序还有些问题。 通过这些天的程序设计课程,从很大程度上锻炼了我编程的能力,从开始连一个小的程序都不会编到现在,自己真的有点成就感,也对于自己以后充满信心,作为计算机专业的学生,我会好好努力去锻炼自己,不断提高编程的能力,成为一个优秀的计算机专业的学生 20088、7 附录一: 源程序代码 #include #include #include #include #include intn,m; structstudent {charnum[6]; charname[20]; charsex[3]; charroom[5]; chartel[10]; }stu[10]; structscore { charnum[6]; charsubnum[4]; charsubject[10]; intoscore; intmark[3]; floattotalmark; floatgscore; }scr[60]; floatca_mark(inti) { if(scr[i].mark[1]==-1) scr[i].totalmark=0.3*scr[i].mark[0]+0.7*scr[i].mark[2]; else scr[i].totalmark=0.15*(scr[i].mark[0]+scr[i].mark[1])+0.7*scr[i].mark[2]; return(scr[i].totalmark); } voidca_score(inti) { intc; c=(int)ca_mark(i)/10; if(c<6)c=5; switch(c) { case10: case9: scr[i].gscore=scr[i].oscore;break; case8: scr[i].gscore=0.8*scr[i].oscore;break; case7: scr[i].gscore=0.75*sc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 学籍 信息管理 系统