学籍管理系统设计.docx
《学籍管理系统设计.docx》由会员分享,可在线阅读,更多相关《学籍管理系统设计.docx(22页珍藏版)》请在冰豆网上搜索。
学籍管理系统设计
中国地质大学(武汉)
C语言课程设计论文
学院:
工程学院
专业:
勘察工程
题目:
学籍管理系统设计
班级:
054081
姓名:
原少云
学号:
20081000484
指导教师:
王改芳
2010年01月06日
报告目录
作者简介——————————————2
报告摘要——————————————2
题目要求——————————————3
需求分析——————————————3
总体分析——————————————3
详细设计——————————————4
上机操作——————————————4~6
总结——————————————6
作者简介
姓名:
原少云
家乡:
山西长治
院系:
工程学院勘察工程专业。
爱好:
兴趣相当广泛笛箫吉他篮球足球乒乓球象棋麻将五子棋样样通。
成绩:
这是我痛处不提也罢
自我评价:
首先说说我的名字,我的名字很简单,取意少说多做。
但是,我个人认为简单而不简约,这个名字还是挺有纪念意义的,我每次介绍自己的时候都得把我们伟大的民族英雄邱少云先吹捧一番。
另外,我这人做事有点拖拖拉拉,有压力才有动力。
课外时间喜欢广泛涉猎各方面的信息,比如看看新闻,浏览网页等。
对实时政治比较关心,但也是好“看”书不求甚解。
呵呵,扯了这么多,该进入正题啦!
报告摘要
此次C语言课程设计我选择的是学籍管理系统设计,系统设计采用c语言在microsoftvisualc++6.0下编译而成。
学籍管理系统包括录入每个学生的学号、课程编号、课程名号、学分平时成绩、试验成绩、卷面成绩共7个数据。
综合成绩、实得学分根据条件自动运算。
系统开发由分析、设计、实施、调试和测试等阶段组成,其中信息管理为开发的重点。
在程序设计中结构体的调用与文件的读写为编译的重点部分。
报告正文
一、题目要求
使用下面的数据,设计一个简单的学籍管理系统。
学生基本信息文件(A.TXT)及其内容:
学号姓名性别宿舍号码电话号码
01张成成男50187732111
02李成华女10187723112
03王成凤女10187732112
04张明明男50287734333
05陈东男50187732111
06李果男50287734333
07张圆圆女10287756122
.................
学生成绩基本信息文件(B.TXT):
学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩实得学分
01A01大学物理3667882
02B03高等数学478-190
01B03高等数学445-188
02C01VF3657666
...............
功能要求及说明:
(1)数据录入功能:
录入每个学生的学号,课程编号,课程名称,学分,平时成绩,实验成绩,卷面成绩共7个数据。
综合成绩,实得学分根据条件自动运算。
综合成绩的计算:
1如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%
2如果实验成绩不为-1,表示本课程有实验成绩,综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70%
实得学分的计算你:
采用等级学分制。
1实得成绩在90—100之间,应得学分=学分*100%
2实得成绩在80—90之间,实得学分=学分*80%
3实得成绩在70—80之间,实得学分=学分*75%
4实得成绩在60—70之间,实得学分=学分*60%
5实得成绩在60以下,实得学分=学分*0%
(2)查询功能:
分为学生基本情况查询和成绩查询两种
1学生基本情况查询:
输入一个学号或姓名(可实现选择),查出此生的基本基本信息并显示输出。
输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。
2成绩查询
输入一个学号时,查询出此生的所有课程情况,格式如下:
学号:
XX姓名:
XXXX
课程编号:
XXX课程名称:
XXXXX综合成绩:
XXX实得学分:
XXX
课程编号:
XXX课程名称:
XXXXX综合成绩:
XXX实得学分:
XXX
课程编号:
XXX课程名称:
XXXXX综合成绩:
XXX实得学分:
XXX
..............
共修:
XX科,实得总学分为:
XXXX
(3)删除功能:
当在A.TXT中删除一个学生时,自动在B.TXT中删除此人所有信息
(4)排序功能:
能实现按综合成绩或实得学分升序或降序排序并显示数据。
提示:
数据结构采用结构体数据,提供学生基本信息和学生成绩基本信息结构体数据组
二、需求分析
根据题目要求,要求对学生信息进行输入、输出等操作;在程序中需要浏览学生的信息,应提供显示、录入、查询、修改、删除等操作;另外还应提供键盘式选择菜单实现功能选择。
三、总体设计
根据需求分析,可以对这个系统的设计分为以下几个模块:
四、详细设计
1、主函数部分:
主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
#include"stdio.h"
#include"stddef.h"
#include"stddef.h"
#include"string.h"
#defineMAX10
typedefstructstudent{
charname[MAX];
intnum[MAX];
charsex[MAX];
intchinese;
intmathematic;
intenglish;
intcomputer;
structstudent*next;
}stu;
stu*head;
voidprint()
{
system("cls");
printf("\t\t\tScoreManageSystem\n");
printf("<1>EnterRecord\t");
printf("<2>Display\t");
printf("<3>Insert\t");
printf("<4>Quest\t");
printf("<5>Update\t");
printf("<6>Save\t");
printf("<7>Fresh\t");
printf("<8>ChineseAverage\t");
printf("<9>MathAverage\t");
printf("<10>EnglishAverage\t");
printf("<11>ComputerAverage\t");
printf("<12>Quit\t\n");
}
voidcin(stu*p1)
{printf("Entername:
\n");
scanf("%s",&p1->name);
printf("Enternum:
\n");
scanf("%d",&p1->num);
printf("Entersex:
\n");
scanf("%s",&p1->sex);
printf("Enterscore:
\n");
printf("Enterchinese:
\n");
scanf("%d",&p1->chinese);
printf("Entermath:
\n");
scanf("%d",&p1->mathematic);
printf("EnterEnglish:
\n");
scanf("%d",&p1->english);
printf("EnterComputer:
\n");
scanf("%d",&p1->computer);
}
stu*cindata()
{stu*p1,*p2;
inti=1;
charch;
p1=(stu*)malloc(sizeof(stu));
head=p1;
while(i)
{
cin(p1);
printf("DoyouWanttoContinue?
yesorno");
ch=getchar();
ch=getchar();
if(ch=='n'||ch=='N')
{i=0;
p1->next=NULL;
}
else
{p2=p1;
p1=(stu*)malloc(sizeof(stu));
p2->next=p1;
}
}
return(p1->next);
}
stu*lookdata(stu*p1)
{
while(p1!
=NULL)
{printf("Num:
%d\t",p1->num);
printf("Name:
%s\t",p1->name);
printf("Sex:
%s\t",p1->sex);
printf("\n");
printf("Chinese:
%d\t",p1->chinese);
printf("Math:
%d\t",p1->mathematic);
printf("English:
%d\t",p1->english);
printf("Computer:
%d\t",p1->computer);
printf("\n");
p1=p1->next;
}
returnp1;
}
voidinsert()
{stu*p1,*p3,*p2;
charch;
p1=head;
p3=(stu*)malloc(sizeof(stu));
p3->next=NULL;
if(head==NULL){head=p3;return;}
cin(p3);
while(p1!
=NULL&&(p1->numnum))
{p2=p1;p1=p1->next;}
if(p2==head){p3->next=head;head=p3;return;}
p3->next=p1;
p2->next=p3;
}
find(stu*p2)
{charname[20];
intb=0;
printf("Enterthenameofthestudentyouwanttofind:
");
scanf("%s",name);
while(p2!
=NULL)
{if(strcmp(name,p2->name)==0)
{
printf("Thedatayouwanthasbefound\n");
printf("Name:
%s\t",p2->name);
printf("Num:
%d\t",p2->num);
printf("sex%s\t",p2->sex);
printf("\n");
printf("Chinese:
%d\t",p2->chinese);
printf("Math:
%d\t",p2->mathematic);
printf("English:
%d\t",p2->english);
printf("Computer:
%d\t",p2->computer);
printf("\n");
b=1;
}
elseif(b==0)
printf("sorrynotfinddata!
");
p2=p2->next;
}
if(b==1)
{
print();
printf("Findone\n");}
else
{print();
printf("Notfind\n");
}
}
voidcaverage()
{stu*p1;
inti;
floatmax=0.0,min=200.0;
floatsum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("notdata!
");
else
{for(i=0;p1!
=NULL;i++,p1=p1->next)
sum+=p1->chinese;
aver=sum/i;
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
{if(maxchinese)
max=p1->chinese;
}
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
if(min>p1->chinese)
min=p1->chinese;
}
printf("ChineseAverage:
%f",aver);
printf("ChineseMax:
%f",max);
printf("ChineseMin:
%f",min);
}
voidmaverage()
{stu*p1;
inti;
floatmax=0.0,min=200.0;
floatsum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("notdata!
");
else
{for(i=0;p1!
=NULL;i++,p1=p1->next)
sum+=p1->mathematic;
aver=sum/i;
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
{if(maxmathematic)
max=p1->mathematic;
}
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
if(min>p1->mathematic)
min=p1->mathematic;
}
printf("MatheAverage:
%f",aver);
printf("MatheMax:
%f",max);
printf("MatheMin:
%f",min);
}
voideaverage()
{stu*p1;
inti;
floatmax=0.0,min=200.0;
floatsum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("notdata!
");
else
{for(i=0;p1!
=NULL;i++,p1=p1->next)
sum+=p1->english;
aver=sum/i;
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
{if(maxenglish)
max=p1->english;
}
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
if(min>p1->english)
min=p1->english;
}
printf("EnglishAverage:
%f",aver);
printf("EnglishMax:
%f",max);
printf("EnglishMin:
%f",min);
}
voidcomaverage()
{stu*p1;
inti;
floatmax=0.0,min=200.0;
floatsum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("notdata!
");
else
{for(i=0;p1!
=NULL;i++,p1=p1->next)
sum+=p1->computer;
aver=sum/i;
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
{if(maxcomputer)
max=p1->computer;
}
p1=head;
for(i=0;p1!
=NULL;i++,p1=p1->next)
if(min>p1->computer)
min=p1->computer;
}
printf("ComputerAverage:
%f",aver);
printf("ComputerMax:
%f",max);
printf("ComputerMin:
%f",min);
}
update(stu*p2)
{
charname[10];
intb=0;
printf("EnterTheName");
scanf("%s",name);
while(p2!
=NULL)
{if(strcmp(name,p2->name)==0)
{
printf("Findyoudata\n");
scanf("Name:
%s",p2->name);
scanf("Num:
%s",p2->num);
scanf("Sex:
%s",p2->sex);
scanf("Chinese:
%d",p2->chinese);
scanf("Math:
%d",p2->mathematic);
scanf("english:
%d",p2->english);
scanf("Computer:
%d",p2->computer);
printf("Success!
");
b=1;}
elseif(b==0)
printf("SorrynotFinddata!
");
p2=p2->next;}
if(b==0)
{print();
printf("SorrynotFinddata!
");
}
else
{
print();
printf("Finish!
");
}
}
save(stu*p2)
{
FILE*fp;
charfile[10];
printf("Enterfilename");
scanf("%s",file);
fp=fopen(file,"w");
while(p2!
=NULL)
{
fprintf(fp,"%s",p2->name);
fprintf(fp,"%s",p2->num);
fprintf(fp,"%s",p2->sex);
fprintf(fp,"%d",p2->chinese);
fprintf(fp,"%d",p2->mathematic);
fprintf(fp,"%d",p2->english);
fprintf(fp,"%d",p2->computer);
p2=p2->next;
}
fclose(fp);
}
charpassword[7]="123456";
voidmain()
{intchoice;
stu*p2;
chars[8];
intflag=0,i;
intn=3;
do{printf("Enterpassword:
\n");
scanf("%s",s);
if(!
strcmp(s,password))
{printf("PASS\n\n\n");
flag=1;
break;
}
else{
printf("ErrorEnteragain:
\n");
n--;
}
}
while(n>0);
if(!
flag)
{printf("youhaveEnter3times!
");
exit(0);
}
printf("~~~~~~~~~~\t\t\t~~~~~~~~~~~~\n");
printf("\t\tWelcomtotheMis\n");
printf("Author:
-----\tClass:
------\tNum:
------\n");
printf("Adress:
HG\n");
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
printf("\t\tEnterOP:
\n");
printf("\n\n\n\n");
printf("==============\t\t==============\n");
printf("==============\t\t==============\n");
printf("\t\tEntertheMISyesorno\n");
scanf("%d",&choice);
if(choice=='n'||choice=='N')
exit
(1);
print();
while
(1)
{
printf("Enterchoice:
");
scanf("%d",&i);
if(i<1||i>13)
{
printf("Enternumfrom1to13:
\n");
exit
(1);
}
switch(i)
{case1:
p2=cindata();
break;
case2:
p2=lookdata(head);
break;
case3:
insert();
break;
case4:
find(head);
break;
case5:
update(head);
break;
case6:
save(head);
break;
case7:
print();
break;
case8:
caverage();
break;
case9:
maverage();
break;
case10:
eaverage();
break;
case11:
comaverage();
break;
case12:
;
case13:
exit
(1);
break;
}
scanf("%d",&i);
}
}
五.上机操作
编译出一个程序,需要上机运行检验程序是否正确,此外在上机过程中你可以思考一下该程序还有没有其他的实现方案或者那些事可以更好的改进的。
下面事各个模块的界面图:
(1)主函数菜单图:
(2)录入信息模块:
(3)显示信息功能:
(4)排序功能:
(5)插入功能:
(6)删除功能:
总结
此次实习中,我成功做出了课堂上老师要求的内容。
虽然最后的一个模块是通过网络找到的,但是也通过此个模块学到了一些在课堂上没有真正掌握的文件部分的自如运用。
通过此次实习,我们更加理解和懂得运用结构化程序设计的思想和方法,初步掌握开发一个小型实用系统的基本方法,学会调试一个较长程序的的基本方法