C语言课程设计说明书课程管理系统.docx
《C语言课程设计说明书课程管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计说明书课程管理系统.docx(29页珍藏版)》请在冰豆网上搜索。
C语言课程设计说明书课程管理系统
C语言课程设计
设计说明书
课程管理系统
起止日期:
2010年06月21日至2010年06月27日
学生姓名:
班级:
09级通信工程
(1)班
成绩:
指导老师(签字):
目录
一、设计目的```````````````````````````````````````````````````````3
二、总体设计```````````````````````````````````````````````````````3
三、详细设计```````````````````````````````````````````````````````3
四、调试与测试`````````````````````````````````````````````````````4
五、核心源程序清单`````````````````````````````````````````````````8
六、仍存在的问题`````````````````````````````````````````34
七、心得体会``````````````````````````````````````````````````````34
一、设计目的
假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。
试设计学生选修课程系统,使之能提供以下功能:
1、课程信息录入功能(课程信息用文件保存)
2、课程信息浏览功能
3、排序:
按开课学期排序
4、查询功能:
按课程名称查询
5、课程修改、删除(可选项)
二、总体设计(程序设计组成框图、流程图)
三、详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)
1.宏定义,文件包含,定义结构体变量;
2.从主函数进入;
3.显示程序进入界面;
4.调用函数一(录入课程详细信息):
键盘上输入课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息
5.调用函数二(浏览课程详细信息):
在键盘上输入课程名,显示对应课程的详细信息。
6.调用函数三(排序:
按开课学期排序):
7.调用函数四(查询课程详细信息):
显示所有输入的课程信息;
8.退出;
四、调试与测试:
调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施
完成每一个函数后,进行单独调试,对测试结果有错的,逐个修改,最后合并在一起进行调试,修改,直到正确无误为止。
测试过程中,在函数四(查找课程信息)中无法将输入信息同已有信息进行比较,经同学指点顺利解决;
1主函数模块(主菜单)
是为了定义一个菜单函数,其功能在于供使用者选择输出菜单功能选择。
其运行结果如下图:
运行正常
2课程信息录入功能
是为了输入课程的详细信息包括课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息
其运行结果如下图
运行正常
3课程信息浏览功能为了让使用者能浏览所有课程详细信息
其运行结果如下图
运行正常
4排序:
按开课学期排序为了让使用者按开课学期排序所有课程详细信息
其运行结果如下图
运行正常
5查询功能:
按课程名称查询是为了使用者按课程名来查询课程详细信息
其运行结果如下图:
运行正常
6退出
是为了使用者退出程序所作的功能
其运行结果如下图:
运行正常
♦调试方法:
先将主函数完毕,在分别加入录入函数、输出函数、查找函数、保存等模块后再调试。
无错之后编译运行。
♦遇到的主要问题及解决方法:
(1)忘记加分号。
(2)忽略了“+”与“++”的区别及\n与n的区别。
(3)scanf("%d%d",&a,&b);输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
6,9输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键
(4)switch语句中漏写break语句。
五、核心源程序清单和执行结果:
#include"stdlib.h"/*标准输入、输出头文件*/
#include"windows.h"/*包含字符串函数处理头文件*/
#include"string.h"/*包含动态存储与释放函数头文件*/
structsubinf
{
intnum;/*定义课程编号*/
charname[20];/*课程名称*/
charfeat[20];/*课程性质*/
intttime;/*定义总学时*/
intltime;/*定义授课学时*/
intetime;/*定义上机学时*/
floatscore;/*学分*/
intterm;/*开课学期*/
};
voidindex()
{
voidsub_add();/*课程信息录入*/
voidsub_view();/*信息浏览*/
voidtaxis();/*排序*/
voidsearch();/*对课程名称查询*/
voidquit();/*退出系统*/
intinput;/*输入*/
charinput_1;
do
{
printf("\n\t欢迎使用课程管理系统");
printf("\n\t1.课程信息录入");
printf("\n\t2.课程信息浏览");
printf("\n\t3.按开课学期排序");
printf("\n\t4.按课程名称查询(修改与删除)");
printf("\n\t5.退出本系统");
printf("\n\t请选择服务类型(1-5):
");
scanf("%d",&input);
if(input!
=1&&input!
=2&&input!
=3&&input!
=4&&input!
=5)
{
printf("\n\t输入错误!
请重输入\n");
printf("\n\t按任意键返回...");
input_1=getchar();
input_1=getchar();
}
if(input==5)
{
quit();
}
}
while(input!
=1&&input!
=2&&input!
=3&&input!
=4&&input!
=5&&input!
=6);
switch(input)
{
case1:
sub_add();break;
case2:
sub_view();break;
case3:
taxis();break;
case4:
search();break;
}
}
voidsub_add()
{
voidindex();
voidsub_add();
inti=0,j;
intinp;
FILE*fp;
charinput;
structsubinfsubs;
structsubinfsub_taxis[100];
printf("\n\t课程信息录入");
printf("\n\n\n\t请输入课程信息\n\n");
printf("\t课程编号:
");
scanf("%d",&subs.num);
printf("\n\t课程名称:
");
scanf("%s",subs.name);
printf("\n\t课程性质:
");
scanf("%s",subs.feat);
printf("\n\t总学时:
");
scanf("%d",&subs.ttime);
printf("\n\t授课学时:
");
scanf("%d",&subs.ltime);
printf("\n\t实验或上机学时:
");
scanf("%d",&subs.etime);
printf("\n\t学分:
");
scanf("%f",&subs.score);
printf("\n\t开课学期:
");
scanf("%d",&subs.term);
if((fp=fopen("sub.dat","rb"))!
=NULL)
{
do
{
fread(&sub_taxis[i],sizeof(structsubinf),1,fp);
i=i+1;
}
while(!
feof(fp));
fclose(fp);
for(j=0;j<=i;j++)
if(subs.num==sub_taxis[j].num)
{
printf("\n\n\n\t!
该编号已经被使用");
printf("\n\t按任意键重录入...");
input=getchar();
input=getchar();
sub_add();
break;
}
}
if((fp=fopen("sub.dat","rb"))==NULL)
{
fp=fopen("sub.dat","wb");
}
else
{
fclose(fp);
fp=fopen("sub.dat","ab");
}
fwrite(&subs,sizeof(structsubinf),1,fp);
fclose(fp);
printf("\n\n\n\t信息已经成功录入!
按任意键继续...");
input=getchar();
input=getchar();
do
{
printf("\n\n\n\t1.继续输入\n");
printf("\t2.返回主菜单\n");
printf("\n\t请选择服务类别(1或2):
");
scanf("%d",&inp);
if(inp!
=1&&inp!
=2)
{
printf("\n\t没有这项服务!
\n");
printf("\t按任意键重新选择...");
input=getchar();
input=getchar();
}
}
while(inp!
=1&&inp!
=2);
switch(inp)
{
case1:
sub_add();break;
case2:
index();break;
}
}
voidsub_view()
{
voidindex();
voidsub_view();
intinp,i=0,n=0;
FILE*fp;
charinput;
structsubinfsubview[100];
if((fp=fopen("sub.dat","rb"))==NULL)
{
printf("\n\n\n\t未输入任何信息,请返回进行课程信息录入!
\n");
printf("\n\t按任意键回主菜单...");
input=getchar();
input=getchar();
index();
}
else
{
do
{
fread(&subview[i],sizeof(structsubinf),1,fp);
i=i+1;
}
while(!
feof(fp));
fclose(fp);
do
{
课程信息录入
课程编号09050001
课程名称:
高数
课程性质:
必修课
总学时20
授课学时20
实验或上机学时10
学分4.0
开课学期2
*******************************************
printf("\n\t课程信息浏览");
printf("\t共有%d/%d条记录",n+1,i-1);
printf("\n\n\t课程编号:
%d\n",subview[n].num);
printf("\n\t课程名称:
%s\n",subview[n].name);
printf("\n\t课程性质:
%s\n",subview[n].feat);
printf("\n\t总学时:
%d\n",subview[n].ttime);
printf("\n\t授课学时:
%d\n",subview[n].ltime);
printf("\n\t实验或上机学时:
%d\n",subview[n].etime);
printf("\n\t学分:
%f\n",subview[n].score);
printf("\n\t开课学期:
%d\n",subview[n].term);
printf("\n\n\t1.[上一页]\t2.[下一页]\t3.[返回]\n");
printf("\n\t请选择(1-3):
");
scanf("%d",&inp);
switch(inp)
{
case1:
{
if(n==0)
{
printf("\n\t已到达首页\n\t按任意键重新选择...");
input=getchar();
input=getchar();
}
else
{
n=n-1;
}
break;
}
case2:
{
if(n==i-2)
{
printf("\n\t已经到达尾页\n\t按任意键重新选择...");
input=getchar();
input=getchar();
}
else
{
n=n+1;
}
break;
}
case3:
{
index();
break;
}
default:
{
printf("\n\t没有这项服务!
\n\t按任意键重新选择...");
input=getchar();
input=getchar();
}
}
}
while(inp!
=3);
}
}
voidtaxis()
{
voidindex();
inti=0,m,n;
FILE*fp;
charinput;
voidindex();
structsubinfsub_taxis[100],temp;
if((fp=fopen("sub.dat","rb"))==NULL)
{
printf("\n\n\t未输入任何信息,无法排序.请返回进行课程信息录入!
\n");
printf("\t按任意键返回主菜单...");
input=getchar();
input=getchar();
index();
}
else
{
rewind(fp);
do
{
fread(&sub_taxis[i],sizeof(structsubinf),1,fp);
i=i+1;
}
while(!
feof(fp));
fclose(fp);
}
for(m=0;mfor(n=0;nif(sub_taxis[n].term>sub_taxis[n+1].term)
{
temp=sub_taxis[n];
sub_taxis[n]=sub_taxis[n+1];
sub_taxis[n+1]=temp;
}
if((fp=fopen("sub.dat","wb"))==NULL)
{
printf("\n\n\n\t数据读取失败!
!
!
\n");
printf("\t请按任意键退出本系统...");
input=getchar();
input=getchar();
exit(0);
}
else
{
for(m=0;mfwrite(&sub_taxis[m],sizeof(structsubinf),1,fp);
fclose(fp);
}
printf("\n\n\n\t排序完成!
\n\t按任意键回主菜单...");
input=getchar();
input=getchar();
index();
}
voidsearch()
{
voidindex();
voidchange(intx);
voiddel(intx);
FILE*fp;
structsubinfsubs[100],subf[100];
charinput,feature[10];
inti=0,w,j,inp,k=0,n=0;
if((fp=fopen("sub.dat","rb"))==NULL)
{
printf("\n\n\n\t未输入任何信息,请返回进行课程信息录入!
\n");
printf("\n\t按任意键回主菜单...");
input=getchar();
input=getchar();
index();
}
else
fp=fopen("sub.dat","rb");
while(!
feof(fp))
{
fread(&subs[i],sizeof(structsubinf),1,fp);
i=i+1;
}
fclose(fp);
printf("\n\n\n\t请输入所查询的课程名称:
");
scanf("%s",feature);
for(j=0;j<=i-2;j++)
{
w=strcmp(subs[j].name,feature);
if(w==0)
{
subf[k]=subs[j];
k=k+1;
}
elseif(k==0&&j==(i-2))
{
system("cls");
printf("\n\n\n\t没有找到符合要求的记录!
\n\t按任意键回主菜单...");
input=getchar();
input=getchar();
index();
}
}
do
{
******************************
课程信息浏览
课程编号09050001
课程名称:
高数
课程性质:
必修课
总学时20
授课学时20
实验或上机学时10
学分4.0
开课学期2
*******************************
system("cls");
printf("\n\t课程信息查询");
printf("\t共为您查询到%d/%d条记录",n+1,k);
printf("\n\t课程编号:
%d\n",subf[n].num);
printf("\n\t课程名称:
%s\n",subf[n].name);
printf("\n\t课程性质:
%s\n",subf[n].feat);
printf("\n\t总学时:
%d\n",subf[n].ttime);
printf("\n\t授课学时:
%d\n",subf[n].ltime);
printf("\n\t实验或上机学时:
%d\n",subf[n].etime);
printf("\n\t学分:
%f\n",subf[n].score);
printf("\n\t开课学期:
%d\n",subf[n].term);
printf("\n\n\t1.[上一页]\t2.[下一页]\t3.[修改]\n\t4.[删除]\t5.[返回]\n");
printf("\n\t请选择(1-5):
");
scanf("%d",&inp);
switch(inp)
{
case1:
{
if(n==0)
{
printf("\n\t已到达首页\n\t按任意键重新选择");
input=getchar();
input=getchar();
}
else
{
n=n-1;
}
break;
}
case2:
{
if(n==k-1)
{
printf("\n\t已到达最末页\n\t按任意键重新选择");
input=getchar();
input=getchar();
}
else
{
n=n+1;
}
break;
}
case3:
{
for(j=0;j<=i-2;j++)
if(subf[n].num==subs[j].num)
{
change(j);
break;
}
}
case4:
{
for(j=0;j<=i-2;j++)
if(subf[n].num==subs[j].num)
{
del(j);
break;
}
}
case5:
index();break;
default:
{
printf("\n\t对不起,没有这项服务!
\n\t按任意键重新选择!
");
input=getchar();
input=getchar();
}
}
}
while(inp!
=5);
}
voidchange(intx)
{
intinp,i=0,j;
voidindex();
FILE*fp,*fp1;
charinput;
structsubinfsubs,sub_tax