学籍信息管理系统.docx
《学籍信息管理系统.docx》由会员分享,可在线阅读,更多相关《学籍信息管理系统.docx(26页珍藏版)》请在冰豆网上搜索。
学籍信息管理系统
C语言课程实习报告
(一)题目要求
使用下面的数据,设计一个简单的学籍管理系统。
学生基本信息文件(A.TXT)及内容:
学号姓名性别宿舍号码电话号码
01张成城男50187732111
02李成华女10187723112
…………..….….………..
学生成绩基本信息文件(B.TXT)及内容:
学号课程编号课程名称学分平时成绩试验成绩卷面成绩综合成绩实得学分
01A01大学物理3667882
02B03高等数学478-190
………………..…..…
功能要求及说明:
(1)数据录入功能:
录入每个学生的学号,课程编号,课程名称,学分,平时成绩,试验成绩,卷面成绩共7个数据.综合成绩,实得学分根据条件自动运算.
综合成绩的计算:
a如果本课程的试验成绩为-1,则表示无实验,综合成=平时成绩*30%+卷面成绩*70%;
b如果试验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70%。
实得学分的计算:
采用登记学分制。
a综合成绩在90~100之间,应得学分=学分*100%
b综合成绩在80~90之间,应得学分=学分*80%
c综合成绩在70~80之间,应得学分=学分*75%
d综合成绩在60~70之间,应得学分=学分*60%
e综合成绩在60以下,应得学分=学分*0%
(2)查询功能:
分为学生基本情况查询和成绩查询两种
a学生基本情况查询:
输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。
输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。
b成绩查询:
输入一个学号时,查询出此生的所有课程情况,格式如下:
学号:
XX姓名:
XXX
课程编号:
XXX课程名称:
XXX综合成绩:
XX实得学分:
X
课程编号:
XXX课程名称:
XXX综合成绩:
XX实得学分:
X
………………………………………………………………
共修:
XX科,实得总学分为:
XX
(3)删除功能:
当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息.
(4)排序功能:
能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
(二)总体设计
学生学籍管理系统
根据上面的需求分析,可以将这个系统的设计分为如下四大模块:
数据的录入及计算,查询,删除,排序。
排序
删除
查询
录入及计算
(三)详细设计
1.全局变量的声明定义
#defineN50
#definek3
#include
#include
#include
#include
#include
/****************定义结果体*********************/
structstud
{
charpro_num[10];
charpro_name[20];
intx;
intusual;
intpapsco;
intemp;
intscore;
intsco;
};
structstudent
{
charnum[10];
charname[20];
charmale[7];
charroom[5];
chartelnum[10];
structstudst[k];
}stu[N];
2.函数
这里主函数提供各功能的选择
【流程图】
【程序】
voidmenu()
{
intn,w1;
/*变量n保存选择菜单数字,w1判断输入是否在菜单上有的功能*/
do
{
puts("\t\t********************MENU*******************\n\n");
puts("\t\t\t\t1.Enternewdata");/*输入学生信息*/
puts("\t\t\t\t2.Search");/*查找学生信息*/
puts("\t\t\t\t3.Deletedata");/*删除学生信息*/
puts("\t\t\t\t4.Ordebyscore");/*学生信息排序*/
puts("\t\t\t\t5.Exit");/*退出*/
puts("\t\t*******************************************\n");
printf("Choiceyournumber(1-5):
[]\b\b");
scanf("%d",&n);
if(n<1||n>5)/*对选择的数字做判断*/
{
w1=1;
getchar();
}
elsew1=0;
}
while(w1==1);
/*选择功能*/
switch(n)
{
case1:
enter();break;
case2:
search();break;
case3:
del();break;
case4:
orde();break;
case5:
exit(0);
}
}
intmain()
{
menu();
}
4.各功能模块设计
(1)输入模块
/************************输入模快*********************/
/*算综合成绩函数*/
voidscore(inti,intj)
{
if(stu[i].st[j].emp==-1)stu[i].st[j].score=stu[i].st[j].usual*3/10+stu[i].st[j].papsco*7/10;
elsestu[i].st[j].score=(stu[i].st[j].usual+stu[i].st[j].emp)*15/100+stu[i].st[j].papsco*7/10;
}
/*求实得学分函数*/
voidsco(inti,intj)
{
intp;
p=stu[i].st[j].papsco/10;
if(p<6)p=5;
if(p==10)p=9;
switch(p)
{
case5:
stu[i].st[j].sco=0;
case6:
stu[i].st[j].sco=stu[i].st[j].x*60/100;
case7:
stu[i].st[j].sco=stu[i].st[j].x*75/100;
case8:
stu[i].st[j].sco=stu[i].st[j].x*80/100;
case9:
stu[i].st[j].sco=stu[i].st[j].x;
}
}
/*输入成绩信息*/
voidscore_input(inti)
{
intj;
for(j=0;j{
scanf("%s%s%d%d%d%d",stu[i].st[j].pro_num,stu[i].st[j].pro_name,&stu[i].st[j].x,&stu[i].st[j].usual,&stu[i].st[j].papsco,&stu[i].st[j].emp);
score(i,j);/*调用综合成绩函数*/
sco(i,j);/*调用实得学分函数*/
}
}
/*学号记录函数*/
voidno_input(inti,intn)/*加载记录或可以记录个数的函数*/
{
intj,s,w1;
do
{
w1=0;
printf("NO.:
");
scanf("%s",stu[i].num);
for(j=0;stu[i].num[j]!
='\0';j++)/*学号输入函数,作了严格的规定*/
if(stu[i].num[j]<'0'||stu[i].num[j]>'9')/*判断学号是否为数字*/
{
puts("Inouterror!
Onlybemadeupof(0-9).Pleasereinput!
\n");
w1=1;
break;
}
if(w1!
=1)
for(s=0;s/*排除第i个学生记录即你要修改的*/
if(s!
=0&&strcmp(stu[s].num,stu[j].num)==0)/*判断学号是否有雷同*/
{
puts("Thisrecordisexisit.Pleasereinput!
\n");
w1=1;
break;
}
}while(w1==1);
}
/*输入一个记录*/
voidintput(inti)
{
no_input(i,i);/*调用学号记录函数*/
printf("name:
");
scanf("%s",stu[i].name);
printf("male:
");
scanf("%s",stu[i].male);
printf("room:
");
scanf("%s",stu[i].room);
printf("tlenum:
");
scanf("%s",stu[i].telnum);
printf("nowintputscore:
");
score_input(i);/*调用分数输入函数*/
}
/*输入函数*/
voidenter()
{
inti,n;
system("cls");
printf("haomanystudent(0-%d)?
:
",N-1);
scanf("%d",&n);
printf("\nEnterdatanow\n\n");
for(i=0;i{
printf("\nInput%dthstudentrecord.\n",i+1);
intput(i);
}
if(i!
=0)save(n,0);/*调用保存函数*/
printf_back();/*调用返回函数*/
}
(2)查询模块
/********************查询模块******************/
/*通过名字或学号查询基本信息函数*/YN
voidsearch1(intn)
{
inti,flog=0;
chars[20];
printf("\n\npleasescanfthenumornamewhichyouwantsearch:
");
scanf("%s",s.name);
/*通过名字查询并输出*/
for(i=0;iif(strcmp(s,stu[i].name)==0){
printf("\n\nnum:
%s\tname:
%s\tmale:
%s\troom:
%s\ttelunm:
%s\n\n",stu[i].num,
stu[i].name,stu[i].male,stu[i].room,stu[i].telnum);
flog=1;
}
else
if(strcmp(s,stu[i].num)==0){
printf("\n\nnum:
%s\tname:
%s\tmale:
%s\troom:
%s\ttelunm:
%s\n\n",stu[i].num,
stu[i].name,stu[i].male,stu[i].room,stu[i].telnum);
flog=1;
}
}
if(flog==0)
printf("Cannotfindthismember");
}
/*通过宿舍号查询该宿舍所有同学的基本信息函数*/
voidsearch2(intn)
{
inti,flog=0;
charr[5];
printf("\n\npleasescanfroomwhichyouwantsearch:
");
scanf("%s",r);
for(i=0;iif(strcmp(r,stu[i].room)==0){/*查找并输出成绩信息*/
printf("\n\nnum:
%s\tname:
%s\tmale:
%s\troom:
%s\ttelunm:
%s\n\n",stu[i].num,
stu[i].name,stu[i].male,stu[i].room,stu[i].telnum);
flog=1;
}
if(flog==0)
printf("Cannotfindthismember");
}
/*通过学号查询成绩信息函数*/
voidsearch3(intn)
{
inti,j,s=0,flog=0;
charm[20];
printf("\n\npleasescanfthenumwhichyouwantsearch:
");
scanf("%s",&m);
for(i=0;iif(strcmp(m,stu[i].num)==0){/*查找所要查找的同学*/
for(j=0;j{
printf("\npto_unm:
%s\tpro_name:
%s\tx:
%d\tusual:
%d\npapsco:
%d\temp:
%d\tscore:
%d\tsco:
%d\n",stu[i].st[j].pro_num,stu[i].st[j].pro_name,
stu[i].st[j].x,stu[i].st[j].usual,stu[i].st[j].papsco,stu[i].st[j].emp,stu[i].st[j].score,stu[i].st[j].sco);
s+=stu[i].st[j].sco;
}
printf("Project:
%d\tAllsco:
%d",j,s);
flog=1;
break;
}
if(flog==0)
printf("Cannotfindthismember");
}
voidsearch()
{
intn,m,w1;/*;*/
system("cls");
n=open_fp();/*调用将文件里的内容输到结果体函数,并得到学生个数*/
do
{/*功能选择*/
printf("whatdoyouwanttodo?
\n\n\t1).searchbynameornum\
2).searchmenmberbyroom3).searchscorcebynum");
printf("Choiceyournumber(1-3):
[]\b\b");
scanf("%d",&m);
if(m<1||m>3)/*对选择的数字做判断*/
{
w1=1;
printf("\n\nyouchoiceiserror,choiceagain.\n\n");
}
elsew1=0;
}
while(w1==1);
switch(m)
{
case1:
search1(n);break;/*调用通过名字或学号查询基本信息函数*/
case2:
search2(n);break;/*调用通过宿舍号查询该宿舍所有同学的基本信息函数*/
case3:
search3(n);break;/*调用通过学号查询成绩信息函数*/
}
printf_back();/*;*/
}
/*****************************************************************/
(3)删除模块
【程序】
/************************删除模快**************************/
voiddel()/*修改数据函数,修改第i个记录*/
{
FILE*fp1,*fp2;
inti,j,n,d;
charnum[10];
system("cls");
n=open_fp();
if((fp2=fopen("A.TXT","wb"))==NULL)/*以输出打开方式,在此前的记录被覆盖*/
{
printf("\nCannotopenfile\n");
exit(0);
}
if((fp1=fopen("B.TXT","wb"))==NULL)/*以输出打开方式,在此前的记录被覆盖*/
{
printf("\nCannotopenfile\n");
exit(0);
}
printf("pleaseinputthenumberwitchyouwantdelete:
[]\b\b");/*;*/
scanf("%s",num);
for(i=0;iif(strcmp(num,stu[i].num)!
=0)
{/*strcmp(num,stu[i].num)=0表示此记录已删除*/
fprintf(fp2,"\n%s%s%s%s%s\n",stu[i].num,stu[i].name,stu[i].male,
stu[i].room,stu[i].telnum);
for(j=0;jfprintf(fp1,"\n%s%s%d%d%d%d%d%d\n",stu[i].st[j].pro_num,stu[i].st[j].pro_name,
stu[i].st[j].x,stu[i].st[j].usual,stu[i].st[j].papsco,stu[i].st[j].emp,stu[i].st[j].score,stu[i].st[j].sco);
}
fclose(fp1);
fclose(fp2);
printf_back();
}
(4)排序模块
【流程图】
【程序】
/************************排序模快**************************/
voidorde()/*对每个学生的成绩按学分或综合得分排序函数*/
{
inti,j,f,n,w1;
structstudt;
system("cls");
n=open_fp();/*调用将文件里的内容输到结果体函数,并得到学生个数*/
printf("Choicewhitchmethuddoyouwant\n\n\t1).Ordebyscore\t2).Ordebysco\n\n");
printf("pleaseinputthenumberwitchyouwantdelete:
[]\b\b");
scanf("%d",&w1);
if(w1==1)
for(i=0;ifor(f=1;ffor(j=0;jif(stu[i].st[j].score>stu[i].st[j+1].score)
{
exchange(&t,&stu[i].st[j]);
exchange(&stu[i].st[j],&stu[i].st[j+1]);
exchange(&stu[i].st[j+1],&t);
}
if(w1==2)
for(i=0;ifor(f=1;ffor(j=0;jif(stu[i].st[j].sco>stu[i].st[j+1].sco)
{
exchange(&t,&stu[i].st[j]);
exchange(&stu[i].st[j],&stu[i].st[j+1]);
exchange(&stu[i].st[j+1],&t);
}
save(n,1);/*排序后调用保存信息函数*/
for(i=0;i{
printf("\n\nnum:
%s\tname:
%s\tmale:
%s\troom:
%s\ttelunm:
%s\n\n",stu[i].num,
stu[i].name,stu[i].male,stu[i].room,stu[i].telnum);
for(j=0;j{
printf("\npto_unm:
%s\tpro_name:
%s\tx:
%d\tusual:
%d\npapsco:
%d\temp:
%d\tscore:
%d\tsco:
%d\n",stu[i].st[j].pro_num,stu[i].st[j].pro_name,
stu[i].st[j].x,stu[i].st[j].usual,stu[i].st[j].papsco,stu[i].st[j].emp,stu[i].st[j].score,stu[i].st[j].sco);
}
}
printf_back();
}
(5)公共函数:
可被多个功能模块调用的函数
/*********************公共函数***********************/
voidexchange(structstud*s,structstud*t)
{
strcpy(s->pro_num,t->pro_num);
strcpy(s->pro_name,t->pro_name);
s->x=t->x;
s->usual=t->usual;
s->papsco=t->papsco;
s->emp=t->emp;
s->score=t->score;
s->sco=t->sco;
}
voidprintf_back()/*一个任务结束时返回开始*/
{
voidmenu();
printf("\n\n\tSuccessful.~_~