c语言课程设计报告.docx
《c语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告.docx(52页珍藏版)》请在冰豆网上搜索。
c语言课程设计报告
C语言程序设计
课程报告
所在学院
地学院
所在班级
012101
班级学号
20101000689__03
姓名
周豪
指导老师
宋军
中国地质大学(武汉)
2012年1月1日
(一)题目要求············································1
(二)需求分析············································1
(三)详细说明··················································1
1、总体设计
2、主程序··················································2
3、主要功能模块说明·····································4
(四)上机操作··················································14
(五)源代码·····················································19
(六)附题外作业源代码
——编写三人选举投票系统·····························34
(七)编程小结·
调试中出现的问题、解决方法及本次编程的感受··37
(一)题目要求
用下面的数据设计一个简单的学籍管理系统。
学生基本信息文件(A.TXT)及其内容:
学号姓名性别宿舍号码电话号码
01张成成男50187732111
02李成华女10187723112
03王成凤女10187723112
04张明明男50287734333
05陈东男50187732111
06李果男50287734333
07张园园女10287756112
学生成绩基本信息文件(B.TXT)及其内容:
.....................................................................................................................
学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩实得学分
01A01大学物理3667882
02B03高等数学478-190
01B03高等数学445-188
02C01VF3657666
................................................................................................................
功能要求极其说明:
(1)数据录入功能:
录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。
实得成绩、实得学分根据条件自动运算。
综合成绩的计算:
a.如果本课程的实验成绩为-1,则表无实验成绩,综合成绩=平时成绩*30%+卷面成绩*70%
b.如果实验成绩不为-1,表示本课程有实验成绩,综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70%
实得学分的计算:
采用等级学分制。
综合成绩在90~100之间,应得学分=学分*100%
综合成绩在80~90之间,应得学分=学分*80%
综合成绩在70~80之间,应得学分=学分*75%
综合成绩在60~70之间,应得学分=学分*60%
综合成绩在60分以下,应得学分=学分*0%
(2)查询功能:
分为学生基本情况查询和成绩查询两种
学生基本情况查询:
输入一个学号或姓名(可实现选择)查出此学生的基本信息并显示输出。
输入一个宿舍号码,可查出本室所有学生的基本信息并显示输出。
称号查询:
输入一个学号时,查出此学生所有课程情况,格式如下:
学号:
XX课程名称:
XXXX综合成绩:
XX实得学分:
XXX
...............................................................................
共修:
X科,实得总分为:
XXX
(3)删除功能:
当在A.TXT中删除一个学生时,自动地在B.TXT中删除此学生所有信息。
(4)排序功能:
能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
(二)需求分析
学生基本信息和学生成绩基本信息用文件存储,提供文件的输入输出操作;要能够完成信息的录入和修改,需要提供学生基本信息及学生成绩基本信息查询删除;实现对学生成绩分类排序操作;实现对学生信息的分类查询;实现对学生信息的分类删除;另外还要提供键盘式选择菜单以实现功能选择。
(三)详细设计
1、总体设计
根据上面的需求分析,可以将这个系统的设计分为以下模块
2、主函数
[流程图]
[程序]
(预处理命令)
#include/*I/o函数*/
#include/*其他说明*/
#include/*字符串函数*/
#defineLEN30/*学号和姓名最大学生人数*/
#defineN100/*最大学生人数*/
structrecord/*声明函数体*/
{
charcode[20];/*学号*/
charname[10];/*姓名*/
intdomitory;/*宿舍号*/
charsex[5];/*性别*/
chartel[20];/*电话*/
intkcbh;/*课程编号*/
charkc_name[15];/*课程名称*/
intcridit;/*学分*/
intps_grade;/*平时成绩*/
intsy_grade;/*实验成绩*/
intjm_grade;/*卷面成绩*/
floatsum;/*综合成绩*/
floatc_cridit;/*应得学分*/
}stu[N];
intk=1,m,n;
voidenter();
voidsearch();
voidmodify();
voidadd();
voiddel();
voiddisplay();
voidsave();
voidmenu();
voidsort();
voidtuichuxitong();
voidwelcome_page();
//........主函数........//
intmain()
{
while(k)
{
welcome_page();
system("pause");/*暂停*/
system("cls");/*清屏*/
printf("请按任意键进入主菜单!
\n");
system("cls");
menu();
system("pause");
}
return0;
}
3、主要功能模块设计
【菜单功能模块】
voidmenu()
{
intnum;
system("COLOR1f");
printf("\n\n学生信息管理系统\n\n");
printf("=======================================================\n");
printf("===============制作人:
周豪===========\n");
printf("\n");
printf("==============系统功能菜单==============\n");
printf("=======友情提醒:
查询前请刷新系统!
======\n");
printf("========================================\n");
printf("|======================================|\n");
printf("|0.系统帮助说明1.输入学生信息|\n");
printf("|--------------------------------------------------------|\n");
printf("|2.查询学生信息3.修改学生信息|\n");
printf("|--------------------------------------------------------|\n");
printf("|4.增加学生信息5.按学号删信息|\n");
printf("|-------------------------------------------------------|\n");
printf("|6.显示当前信息7.保存当前信息|\n");
printf("|--------------------------------------------------------|\n");
printf("|8.排序9.退出系统|\n");
printf("|======================================|\n");
printf("========================================\n");
printf("请选择菜单编号:
");
scanf("%d",&num);
switch(num)
{
case0:
system("cls");help();break;
case1:
system("cls");enter();break;
case2:
system("cls");search();break;
case3:
system("cls");modify();break;
case4:
system("cls");add();break;
case5:
system("cls");del();break;
case6:
system("cls");display();break;
case7:
system("cls");save();break;
case8:
system("cls");sort();break;
case9:
system("cls");k=0;tuichuxitong();
break;
default:
printf("请在0--9之间选择\n");
}
}
【数据录入模块】
【流程图】
[程序]
voidenter()/*实现录入学生基本信息功能*///输入功能模块
{
inti,flag=1;
while(flag)
{
flag=0;
printf("请输入需要创建信息的学生人数(1-100):
\n");
scanf("%d",&n);
if(n<1||n>100)
{
flag=1;
printf("输入数值超过范围,检查后请重新输入!
\n");
}
}
for(i=0;i{
printf("请输入第%d个学生的基本信息:
\n",i+1);
printf("请输入学号:
\n");
scanf("%s",stu[i].code);
printf("请输入姓名:
\n");
scanf("%s",stu[i].name);
getchar();
printf("请输入性别(男,女):
\n");
scanf("%s",stu[i].sex);
printf("请输入宿舍号\n");
scanf("%d",&stu[i].domitory);
printf("请输入电话号码:
\n");
scanf("%s",stu[i].tel);
printf("请输入课程编号\n");
scanf("%d",&stu[i].kcbh);
getchar();
printf("请输入课程名称\n");
scanf("%s",stu[i].kc_name);
getchar();
printf("请输入学分\n");
scanf("%d",&stu[i].cridit);
printf("请输入平时成绩\n");
scanf("%d",&stu[i].ps_grade);
printf("请输入实验成绩\n");
scanf("%d",&stu[i].sy_grade);
printf("请输入卷面成绩\n");
scanf("%d",&stu[i].jm_grade);
if(stu[i].sy_grade==-1)
stu[i].sum=(float)stu[i].ps_grade*0.3+(float)stu[i].jm_grade*0.7;
elsestu[i].sum=(float)stu[i].ps_grade*0.15+(float)stu[i].sy_grade*0.15+(float)stu[i].jm_grade*0.7;
if(stu[i].sum>=90&&stu[i].sum<=100)
stu[i].c_cridit=(float)stu[i].cridit;
elseif(stu[i].sum>=80&&stu[i].sum<90)
stu[i].c_cridit=(float)stu[i].cridit*0.8;
elseif(stu[i].sum>=70&&stu[i].sum<80)
stu[i].c_cridit=(float)stu[i].cridit*0.75;
elseif(stu[i].sum>=60&&stu[i].sum<70)
stu[i].c_cridit=(float)stu[i].cridit*0.6;
else
stu[i].c_cridit=(float)stu[i].cridit*0;
}
printf("录入信息完毕!
,按任意键继续。
\n");
save();
}
【查询模块】
[流程图]
[程序]
/*******************************查询模块*********************/
voidsearch(){
inth,i,t,flag,ts1;
floats=0;
chars1[30];
system("COLOR5f");
printf("\n=================================\n");
printf("|1.按学号查询|\n");
printf("|2.按姓名查询|\n");
printf("|3.按寝室查询|\n");
printf("|4.成绩查询|\n");
printf("|5.退出本菜单|\n");
printf("=================================\n");
while
(1)
{
flag=0;
printf("请输入子菜单编号:
");
scanf("%d",&t);
switch(t)
{
case1:
printf("请输入要查询的学生的学号:
");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].code,s1)==0)
{
flag=1;
printf("学生学号姓名性别电话宿舍号\n");
printf("========================================================\n");
printf("%12s%7s%6s%15s%5d\n",stu[i].code,stu[i].name,stu[i].sex,stu[i].tel,stu[i].domitory);
}
if(flag==0)
printf("该学号不存在!
\n");break;
case2:
printf("请输入要查询的学生的姓名:
");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].name,s1)==0)
{
flag=1;
printf("学生学号姓名性别电话宿舍号\n");printf("=============================================================\n");
printf("%6s%7s%6s%15s%5d\n",stu[i].code,stu[i].name,stu[i].sex,stu[i].tel,stu[i].domitory);
}
if(flag==0)
printf("该姓名不存在!
\n");break;
case3:
printf("请输入要查询的学生的寝室:
\n");
scanf("%d",&ts1);
for(i=0;iif(stu[i].domitory==ts1)
{
flag=1;
printf("学生学号姓名性别电话宿舍号\n");printf("=============================================================\n");
printf("%6s%7s%6s%15s%5d\n",stu[i].code,stu[i].name,stu[i].sex,stu[i].tel,stu[i].domitory);
i++;
break;
}
for(;iif(stu[i].domitory==ts1)
printf("%6s%7s%6s%15s%5d\n",stu[i].code,stu[i].name,stu[i].sex,stu[i].tel,stu[i].domitory);
if(flag==0)
printf("该寝室不存在!
\n");break;
case4:
printf("请输入要查询学生的学号:
");
scanf("%s",s1);
for(i=0;i{
if(strcmp(stu[i].code,s1)==0)
{
flag=1;
if(i==0)
{printf("学号%s姓名%s",stu[i].code,stu[i].name);}
printf("\n课程编号%s课程名称%s综合成绩%.2f实得学分%.2f\n",&stu[i].kcbh,stu[i].kc_name,stu[i].sum,stu[i].c_cridit);
s+=stu[i].c_cridit;}
printf("\n共修%d科,实得学分为%.2f\n",i+1,s);break;
if(flag==0)
{printf("该学号不存在!
\n");break;}}
case5:
return;
default:
printf("请在1--5之间选择\n");
}
}
}
【删除模块】
[流程图]
[程序]
voiddel()//删除功能模块
{
inti,j,flag=0;
chars1[15];
printf("请输入将要删除的学生的学号:
\n");
scanf("%s",s1);
for(i=1;iif(strcmp(stu[i].code,s1)==0)
{
flag=1;
for(j=i;jstu[j]=stu[j+1];
}
if(flag==0)
printf("该学号不存在!
\n");
if(flag==1)
{
printf("删除成功!
显示结果请按6!
\n");
n--;
}
}
voiddisplay()//显示功能模块
{
inti;
FILE*fp;
if((fp=fopen("student.txt","rb"))==NULL)
{
printf("打开文件时错误!
请按任意键退出!
");
system("pause");
exit(0);
}
printf("*****************所有学生的信息为********************************\n");
printf("============================================================\n");
for(i=0;i{fread(&stu[i],sizeof(structrecord),1,fp);
printf("学生学号:
%s姓名:
%s性别:
%s电话:
%s宿舍:
%d\n",stu[i].code,stu[i].name,stu[i].sex,stu[i].tel,stu[i].domitory);
printf("\n课程编号:
%d课程名称:
%s学分:
%d平时成绩:
%d实验成绩:
%d卷面成绩:
%d\n",stu[i].kcbh,stu[i].kc_name,stu[i].cridit,stu[i].ps_grade,stu[i].sy_grade,stu[i].jm_grade,
stu[i].c_cridit,stu[i].sum);
printf("\n应得学分:
%.2f综合成绩:
%.2f\n",stu[i].c_cridit,stu[i].sum);
printf("*********************************************************\n");
}
}
【排序模块】
[流程图]
[程序]
/***********************************排序模块******************************/
voidsort()//排序功能模块
{
inti,j,flag=0,tempcn;
intch,ch1;
structrecordtemp;
FILE*fp;
while
(1)
{
printf("\n******