C语言课程设计报告-课程信息管理系统

发布时间:2021-08-22   来源:文档文库   
字号:



本科生课程论文封面


C语言课程设计 本科生姓名 本科生学号 本科生专业 会计学 经济管理学院
类别: 课程设计 日期: 2015121




课程设计评语
对课程论文的评语:

平时成绩: 绩:

课程论文成绩: 评阅人签名:
注:1、无评阅人签名成绩无效;
2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;
3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。


课程设计评语 .................................................................. 2 ......................................................................... 1 1.课程论文题目 ............................................................... 4 2.程序设计思路 ............................................................... 4 3.功能模块图 ................................................................. 5 4.数据结构设计 .............................................................. 10 5.算法设计 .................................................................. 11 6.程序代码 .................................................................. 20 7.程序运行结果 .............................................................. 31 8.编程中遇到的困难及解决方法 ................................................ 36 9.总结心得及良好建议 ........................................................ 36 10.致谢 ..................................................................... 37


1.课程论文题目
课程信息管理系统
课程信息包括:记录编号、课程编号、课程名、学时(讲课学时、实践学时)学分、开课学期,考核方式(考试/报告) 功能要求:
A 从课程信息文件中读取已有的课程信息,并实现屏幕显示。
B 能通过课程编号对已有的课程信息进行修改,要求编号不能修改,其他信息内容都可改,修改的结果保存至课程信息文件。
C 实现对课程信息的统计(分学期统计课程数量及开课总学分数)。
D 实现对课程信息的查询显示(查询条件分为课程编号、课程学分、开课学期),对有多条记录的查询结果按照课程开课学期进行排序显示。 E 新课程信息的添加并保存至课程信息文件。
F 数据约束关系:学时=讲课学时+时间学时;学分=学时/16 G 课程信息的删除,根据课程编号,删除指定课程信息,并将结果写入文件。 H 每增加一条记录,记录编号自动加1

2.程序设计思路
1)需求分析
由于要录入、读取、保存课程信息,因而要实现文件的输入输出以及保存功能;要求可以对课程信息进行统计,因而需要有统计功能;要求用户可以修改、删除课程信息,并且可以添加新课程信息等,因而要提供修改、删除和添加功能;另外,还应该提供键盘式选择菜单以实现功能选择。
2)总体设计
可以将这个系统的设计分为数据输入、数据修改、数据统计、数据查找、数据添加、删除数据、数据显示7个模块。
3)数据结构设计
根据问题描述,可采用结构体数组。
结点结构(画相应的结构图

Number ClassNumber Name TeachTime PracticeTime Credit Semester TextWay
定义如下: struct Class {
int Number; int ClassNumber; char Name[10]; float TeachTime; float PracticeTime;
float Credit; char Semester[10]; char TextWay[10]; } Class[10],CL; 3.功能模块图
【输入课程信息数据模块】:






【显示课程信息模块】:

查询课程模块】:

【修改课程信息模块】:



【统计课程数目模块】:

【课程信息添加模块】:



【删除课程信息模块】:





4.数据结构设计


结构体{ 成员表列:
}
While
Menue
Switch input Modification Statistics Query Add Delete Display Yes 判断
把课程的相关信息作为结构体成员,存放若干课程信息用结构体数组。用while循环控制功能菜单的选择,swith中设置相应的功能模块函数调用,调用完一个函数后然后返回while进行判断,结果为真则进行功能菜单的选择,如果条件为假则终止函数。

No
5.算法设计
1)总体设计
把课程的记录编号、课程编号、课程名、学时(讲课学时、实践学时)、学分、开课学期,考核方式(考试/报告)作为结构体成员,存放若干个课程的信息用结构体数组。将要实现的功能分为一个一个的函数模块,需实现哪个供的语句时就调用该功能语句。而要实现菜单式的功能选择又需要while中嵌套swith句,即调用完一个函数后进行while判断,while中的条件控制语句如果为真,执行功能选项,然后进行swith判断,符合case几的选项就调用相应的函数,然后再进行while判断,直到不符合条件是跳出循环,结束函数。这样就实现了函数的菜单式功能选择并得到相应的结果。 2)各个功能模块的设计
各个函数功能模块实现不同的功能,且互相不影响。加入需同时实现二个或两个以上的函数就同时调用函数,这与函数模块之间互相独立互不影响不矛盾,而且这样写思路清晰,程序可读性高,不易出错,能够插入你想要的模块功能而不影响其他的函数和整体。 3)输入数据模块具体算法
首先是声明结构体,然后定义结构体数组,数组的每一个元素都包含结构体中的所有成员,即一个课程的所有信息。for循环遍历分别输入每一个课程的: 课程编号、课程名、学时(讲课学时、实践学时)、学分、开课学期,考核方式(考试/报告)。循环结束完后即完成了数据的录入操作。代码如下:
/**********输入模块***********/ void Input( { int i = g_intNum;
char c; for (int t = 1; t;i++,g_intNum++
{
int flag=1; printf("请输入要输入的课程的相关信息:\n";
Class[i].Number = i; printf("请输入课程编号:"; scanf("%d", &Class[i].ClassNumber; printf("请输入课程名:"; scanf("%s", Class[i].Name; printf("请输入讲课学时:"; scanf("%f", &Class[i].TeachTime; printf("请输入实践学时:";
scanf("%f", &Class[i].PracticeTime;
Class[i].Credit = (Class[i].TeachTime + Class[i].PracticeTime / 16;
printf("请输入开课学期(春季或者秋季:";
scanf("%s", Class[i].Semester; printf("请输入考核方式(考试或者报告:"; scanf("%s", Class[i].TextWay; printf("是否继续输入 Y/N\n"; while(flag
{ fflush(stdin; scanf("%c",&c; switch (c
{ case 'Y': flag = 0; break; case 'y': flag = 0; break;
case 'N': t = 0;flag = 0; break;
case 'n': t = 0;flag = 0; break;
default: printf("输入有误,重新输入Y/N:"; } }
} save(; } 4)信息修改模块具体算法
首先输入信息,用for循环遍历每一个课程的课程编号,找出相应信息在文件的位置,依次用修改的信息替换掉原文件信息,即完成修改信息的操作。代码如下:
/*******修改模块*******/ void Modification( {
int n,i; printf("请输入您要修改的课程的课程编号:";
scanf("%d", &n; for ( i = 0; i < 10; i++
{
if (Class[i].ClassNumber == n break;
}
FILE*fp; if ((fp = fopen("Class.txt", "r" == NULL
{ printf("cannot open file\n"; exit(0;
} fscanf(fp, "%d%s%f%f%f%s%s\n",&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay; printf("请输入要修改的课程的相关信息:\n"; Class[i].ClassNumber=n; printf("请输入课程名:";
scanf("%s", CL.Name; strcpy(Class[i].Name,CL.Name; printf("请输入讲课学时:";
scanf("%f", &CL.TeachTime; Class[i].TeachTime=CL.TeachTime; printf("请输入实践学时:"; scanf("%f", &CL.PracticeTime; cticeTime; CL.Credit = (CL.TeachTime+ CL.PracticeTime / 16;
Class[i].Credit=CL.Credit ; printf("请输入开课学期(春季或者秋季:";
scanf("%s", CL.Semester; strcpy(Class[i].Semester,CL.Semester; printf("请输入考核方式(考试或者报告:";
scanf("%s", CL.TextWay; strcpy(Class[i].TextWay,CL.TextWay; save(; fclose(fp; } 5)信息统计模块具体算法
首先定义两个整型变量和两个浮点型变量,再用for循环和if条件语句遍历文件,若符合条件,整型变量自增一,浮点型变量由零开始相加,直至信息终结,即完成统计操作。代码如下:
/***********统计模块***********/ void Statistics( {
int i,n1=0,n2=0;
float m1=0,m2=0;
FILE*fp; if ((fp = fopen("Class.txt", "r" == NULL
{ printf("cannot open file\n"; exit(0;
} for ( i = 0; i < 10; i++
{ fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay; if (strcmp(Class[i].Semester,"春季"==0
{
n1++; m1= m1 + Class[i].Credit;
} else if (strcmp(Class[i].Semester,"秋季"==0
{
n2++; m2 = m2 + Class[i].Credit; }
} printf("春季学期总课程数为%d\n", n1; printf("春季学期总学分数为%f\n", m1; printf("秋季学期总课程数为%d\n", n2; printf("秋季学期总学分数为%f\n", m2; } 6)信息查询模块具体算法
for循环和if条件语句连用,先按选择的条件定位,再用for循环遍历文件,找出相应的信息使其显示在屏幕上即完成操作。代码如下:
/**********查询模块**************/ void Query( { int i, k,a; float b; char m[10];
FILE*fp; if ((fp = fopen("Class.txt", "r" == NULL
{ printf("cannot open file\n";
exit(0;

}
for (i= 0; i<10; i++ fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay; printf("查询模块:";
printf("\n"; printf("***********************************************\n"; printf("* *\n"; printf("* 1:课程编号 2:课程学分 *\n"; printf("* *\n"; printf("* 3:开课学期 *\n"; printf("* *\n"; printf("***********************************************\n"; printf("\n\n请输入查询选项:"; scanf("%d", &k; for (; k<1 || k>4;
{ printf("请输入14之间的整数:"; scanf("%d", &k;
} if (k==1
{ printf("请输入要查询的课程编号:";
scanf("%d", &a; for ( i = 0; i < 10; i++
{ if (Class[i].ClassNumber == a break;
} printf("记录编号:%d\n",Class[i].Number; printf("课程编号:%d\n",Class[i].ClassNumber; printf("课程名:%s\n",Class[i].Name; printf("讲课学时:%f\n",Class[i].TeachTime; printf("实践学时:%f\n",Class[i].PracticeTime; printf("学分:%f\n",Class[i].Credit; printf("开课学期:%s\n",Class[i].Semester; printf("考核方式:%s\n\n",Class[i].TextWay;
} else if (k==2
{ printf("请输入要查询的课程的学分:";

}
scanf("%f", &b; for ( i = 0; i < 10; i++
{ if (Class[i].Credit == b
{ printf("记录编号:%d\n",Class[i].Number; printf("课程编号:%d\n",Class[i].ClassNumber; printf("课程名:%s\n",Class[i].Name; printf("讲课学时:%f\n",Class[i].TeachTime; printf("实践学时:%f\n",Class[i].PracticeTime; printf("学分:%f\n",Class[i].Credit; printf("开课学期:%s\n",Class[i].Semester; printf("考核方式:%s\n\n",Class[i].TextWay; } } } else { printf("请输入要查询的开课学期:";
scanf("%s", m; for ( i = 0; i < 10; i++
{ if (strcmp(Class[i].Semester,m==0
{ printf("记录编号:%d\n",Class[i].Number; printf("课程编号:%d\n",Class[i].ClassNumber; printf("课程名:%s\n",Class[i].Name; printf("讲课学时:%f\n",Class[i].TeachTime; printf("实践学时:%f\n",Class[i].PracticeTime; printf("学分:%f\n",Class[i].Credit; printf("开课学期:%s\n",Class[i].Semester; printf("考核方式:%s\n\n",Class[i].TextWay; } } } 7)信息添加模块具体算法
for循环遍历文件中的信息,找出结构体数组中最后一个数组的位置,使全局变量自增一作为记录编号,信息也将写入后一个空位置,填入信息即可完成操作。代码如下:
/**********添加模块*************/ void Add(
{
int i; int t=g_intNum++;
FILE*fp; if ((fp = fopen("Class.txt", "r" == NULL
{ printf("cannot open file\n"; exit(0;
} for (i=0; i<10; i++
{ fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay; if (Class[i].Number == 0 break;
} printf("请输入要添加的课程的相关信息:\n"; Class[i].Number = t; printf("请输入课程编号:"; scanf("%d", &Class[i].ClassNumber; printf("请输入课程名:"; scanf("%s", Class[i].Name; printf("请输入讲课学时:"; scanf("%f", &Class[i].TeachTime; printf("请输入实践学时:";
scanf("%f", &Class[i].PracticeTime; Class[i].Credit = (Class[i].TeachTime + Class[i].PracticeTime / 16; printf("请输入开课学期(春季或者秋季:";
scanf("%s", Class[i].Semester; printf("请输入考核方式(考试或者报告:"; scanf("%s", Class[i].TextWay; save(; } 8)信息删除模块具体算法
首先定义变量n使输入的课程编号为n然后用for循环遍历文件找出相应课程编号的位置,令其所有信息值为空,之后保存即可完成操作。代码如下:
/********删除模块**********/ void Delete( {
int n,i; printf("请输入要删除的课程的课程编号:";
scanf("%d", &n;
FILE*fp; if ((fp = fopen("Class.txt", "r" == NULL
{ printf("cannot open file\n"; exit(0;
} for ( i = 0; i < 10; i++
{ fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay; if (Class[i].ClassNumber == n
{ Class[i].Number = 0; Class[i].ClassNumber=0;
Class[i].Credit = 0; strcpy(Class[i].Name, "0";
Class[i].PracticeTime = 0; strcpy(Class[i].Semester, "0";
Class[i].TeachTime=0; strcpy(Class[i].TextWay, "0"; break; }
} save(; fclose(fp; } 9)浏览模块具体算法
定义指针fp,打开文件,用for循环依次将信息输出到屏幕上即完成操作。代码如下:
/*******显示模块**********/ void Display( {
FILE*fp; if ((fp = fopen("Class.txt", "r" == NULL
{ printf("cannot open file\n"; exit(0;
}
for (int i = 0; i<10; i++ fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber,
Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].TextWay; for (i = 0; i < 10&&Class[i].Number!='\0'; i++
{ printf("记录编号:%d\n",Class[i].Number; printf("课程编号:%d\n",Class[i].ClassNumber; printf("课程名:%s\n",Class[i].Name; printf("讲课学时:%f\n",Class[i].TeachTime; printf("实践学时:%f\n",Class[i].PracticeTime; printf("学分:%f\n",Class[i].Credit; printf("开课学期:%s\n",Class[i].Semester; printf("考核方式:%s\n\n",Class[i].TextWay;
} fclose(fp; } Class[i].Semester, 10)保存模块具体算法
首先定义一个结构体指针变量fp,然后将文件指向打开文件的信息区,设置打开文件方式为写方式,如果打开文件成功执行fprintf函数,将结构体成员中的信息按指定的格式输出到fp指向的文件中,关闭文件,然后返回到功能选项菜单。代码如下:
void save(//定义函数save,向文件输出课程信息
{ FILE *fp;
int i; if ((fopen("Class.txt", "r" == NULL//打开输出文件Class fp = fopen("Class.txt", "w+";
else fp = fopen("Class.txt", "r+"; for (i = 0; i < 10; i++
{ fprintf(fp, "%d", Class[i].Number;
fputc('\n', fp; fprintf(fp, "%d", Class[i].ClassNumber;
fputc('\n', fp; fprintf(fp, "%s", Class[i].Name;
fputc('\n', fp; fprintf(fp, "%f",Class[i].TeachTime;
fputc('\n', fp; fprintf(fp, "%f", Class[i].PracticeTime;
fputc('\n', fp;
fprintf(fp, "%f", Class[i].Credit;

}
fputc('\n', fp; fprintf(fp, "%s", Class[i].Semester;
fputc('\n', fp; fprintf(fp, "%s", Class[i].TextWay; fputc('\n', fp; } fclose(fp; 6.程序代码
#include #include #include struct Class { int Number; // 记录编号 int ClassNumber; // 课程编号 char Name[10]; // 课程名 float TeachTime; // 讲课学时 float PracticeTime; // 实践学时 float Credit; // 学分 char Semester[10]; // 开课学期 char TextWay[10]; // 考核方式 } Class[10],CL;
int g_intNum = 1;
/**********输入模块***********/ void save(//定义函数save,向文件输出课程信息
{ FILE *fp;
int i; if ((fopen("Class.txt", "r" == NULL//打开输出文件Class fp = fopen("Class.txt", "w+";
else fp = fopen("Class.txt", "r+"; for (i = 0; i < 10; i++
{ fprintf(fp, "%d", Class[i].Number;
fputc('\n', fp; fprintf(fp, "%d", Class[i].ClassNumber;
fputc('\n', fp;
fprintf(fp, "%s", Class[i].Name;
fputc('\n', fp; fprintf(fp, "%f",Class[i].TeachTime;
fputc('\n', fp; fprintf(fp, "%f", Class[i].PracticeTime;
fputc('\n', fp; fprintf(fp, "%f", Class[i].Credit;
fputc('\n', fp; fprintf(fp, "%s", Class[i].Semester;
fputc('\n', fp; fprintf(fp, "%s", Class[i].TextWay; fputc('\n', fp;
} fclose(fp; }
void Input( { int i = g_intNum;
char c; for (int t = 1; t;i++,g_intNum++
{
int flag=1; printf("请输入要输入的课程的相关信息:\n";
Class[i].Number = i; printf("请输入课程编号:"; scanf("%d", &Class[i].ClassNumber; printf("请输入课程名:"; scanf("%s", Class[i].Name; printf("请输入讲课学时:"; scanf("%f", &Class[i].TeachTime; printf("请输入实践学时:";
scanf("%f", &Class[i].PracticeTime; Class[i].Credit = (Class[i].TeachTime + Class[i].PracticeTime / 16; printf("请输入开课学期(春季或者秋季:";
scanf("%s", Class[i].Semester; printf("请输入考核方式(考试或者报告:"; scanf("%s", Class[i].TextWay; printf("是否继续输入 Y/N\n"; while(flag
{
fflush(stdin;
scanf("%c",&c; switch (c
{ case 'Y': flag = 0; break; case 'y': flag = 0; break;
case 'N': t = 0;flag = 0; break;
case 'n': t = 0;flag = 0; break;
default: printf("输入有误,重新输入Y/N:"; } }
} save(; }
/*******修改模块*******/ void Modification( {
int n,i; printf("请输入您要修改的课程的课程编号:";
scanf("%d", &n; for ( i = 0; i < 10; i++
{ if (Class[i].ClassNumber == n break;
}
FILE*fp; if ((fp = fopen("Class.txt", "r" == NULL
{ printf("cannot open file\n"; exit(0;
} fscanf(fp, "%d%s%f%f%f%s%s\n",&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester,
Class[i].TextWay; printf("请输入要修改的课程的相关信息:\n"; Class[i].ClassNumber=n; printf("请输入课程名:";
scanf("%s", CL.Name; strcpy(Class[i].Name,CL.Name; printf("请输入讲课学时:";
scanf("%f", &CL.TeachTime; Class[i].TeachTime=CL.TeachTime; printf("请输入实践学时:";
scanf("%f", &CL.PracticeTime;
Class[i].PracticeTime=CL.PracticeTime; CL.Credit = (CL.TeachTime+ CL.PracticeTime / 16;
Class[i].Credit=CL.Credit ; printf("请输入开课学期(春季或者秋季:";
scanf("%s", CL.Semester; strcpy(Class[i].Semester,CL.Semester; printf("请输入考核方式(考试或者报告:";
scanf("%s", CL.TextWay; strcpy(Class[i].TextWay,CL.TextWay; save(; fclose(fp; }
/***********统计模块***********/ void Statistics( { int i,n1=0,n2=0; float m1=0,m2=0;
FILE*fp; if ((fp = fopen("Class.txt", "r" == NULL
{ printf("cannot open file\n"; exit(0;
} for ( i = 0; i < 10; i++
{ fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay; if (strcmp(Class[i].Semester,"春季"==0
{

n1++; m1= m1 + Class[i].Credit;
} else if (strcmp(Class[i].Semester,"秋季"==0
{
n2++; m2 = m2 + Class[i].Credit; }
} printf("春季学期总课程数为%d\n", n1; printf("春季学期总学分数为%f\n", m1; printf("秋季学期总课程数为%d\n", n2; printf("秋季学期总学分数为%f\n", m2; }
/**********查询模块**************/ void Query( { int i, k,a; float b; char m[10];
FILE*fp; if ((fp = fopen("Class.txt", "r" == NULL
{ printf("cannot open file\n"; exit(0;
}
for (i= 0; i<10; i++ fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay; printf("查询模块:";
printf("\n"; printf("***********************************************\n"; printf("* *\n"; printf("* 1:课程编号 2:课程学分 *\n"; printf("* *\n"; printf("* 3:开课学期 *\n"; printf("* *\n"; printf("***********************************************\n"; printf("\n\n请输入查询选项:";
scanf("%d", &k;
for (; k<1 || k>4;
{ printf("请输入14之间的整数:"; scanf("%d", &k;
} if (k==1
{ printf("请输入要查询的课程编号:";
scanf("%d", &a; for ( i = 0; i < 10; i++
{ if (Class[i].ClassNumber == a break;
} printf("记录编号:%d\n",Class[i].Number; printf("课程编号:%d\n",Class[i].ClassNumber; printf("课程名:%s\n",Class[i].Name; printf("讲课学时:%f\n",Class[i].TeachTime; printf("实践学时:%f\n",Class[i].PracticeTime; printf("学分:%f\n",Class[i].Credit; printf("开课学期:%s\n",Class[i].Semester; printf("考核方式:%s\n\n",Class[i].TextWay;
} else if (k==2
{ printf("请输入要查询的课程的学分:";
scanf("%f", &b; for ( i = 0; i < 10; i++
{ if (Class[i].Credit == b
{ printf("记录编号:%d\n",Class[i].Number; printf("课程编号:%d\n",Class[i].ClassNumber; printf("课程名:%s\n",Class[i].Name; printf("讲课学时:%f\n",Class[i].TeachTime; printf("实践学时:%f\n",Class[i].PracticeTime; printf("学分:%f\n",Class[i].Credit; printf("开课学期:%s\n",Class[i].Semester; printf("考核方式:%s\n\n",Class[i].TextWay; } }
}
else
{ printf("请输入要查询的开课学期:";
scanf("%s", m; for ( i = 0; i < 10; i++
{ if (strcmp(Class[i].Semester,m==0
{ printf("记录编号:%d\n",Class[i].Number; printf("课程编号:%d\n",Class[i].ClassNumber; printf("课程名:%s\n",Class[i].Name; printf("讲课学时:%f\n",Class[i].TeachTime; printf("实践学时:%f\n",Class[i].PracticeTime; printf("学分:%f\n",Class[i].Credit; printf("开课学期:%s\n",Class[i].Semester; printf("考核方式:%s\n\n",Class[i].TextWay; } } } }
/**********添加模块*************/ void Add( {
int i; int t=g_intNum++;
FILE*fp; if ((fp = fopen("Class.txt", "r" == NULL
{ printf("cannot open file\n"; exit(0;
} for (i=0; i<10; i++
{ fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay; if (Class[i].Number == 0 break;
} printf("请输入要添加的课程的相关信息:\n"; Class[i].Number = t;
printf("请输入课程编号:"; scanf("%d", &Class[i].ClassNumber; printf("请输入课程名:"; scanf("%s", Class[i].Name; printf("请输入讲课学时:"; scanf("%f", &Class[i].TeachTime; printf("请输入实践学时:";
scanf("%f", &Class[i].PracticeTime; Class[i].Credit = (Class[i].TeachTime + Class[i].PracticeTime / 16; printf("请输入开课学期(春季或者秋季:";
scanf("%s", Class[i].Semester; printf("请输入考核方式(考试或者报告:"; scanf("%s", Class[i].TextWay; save(; }
/********删除模块**********/ void Delete( {
int n,i; printf("请输入要删除的课程的课程编号:"; scanf("%d", &n;
FILE*fp; if ((fp = fopen("Class.txt", "r" == NULL
{ printf("cannot open file\n"; exit(0;
} for ( i = 0; i < 10; i++
{ fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay; if (Class[i].ClassNumber == n
{ Class[i].Number = 0; Class[i].ClassNumber=0;
Class[i].Credit = 0; strcpy(Class[i].Name, "0";
Class[i].PracticeTime = 0; strcpy(Class[i].Semester, "0";
Class[i].TeachTime=0;
strcpy(Class[i].TextWay, "0"; break; }
} save(; fclose(fp; }
/*******显示模块**********/ void Display( {
FILE*fp; if ((fp = fopen("Class.txt", "r" == NULL
{ printf("cannot open file\n"; exit(0;
}
for (int i = 0; i<10; i++ fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay; for (i = 0; i < 10&&Class[i].Number!='\0'; i++
{ printf("记录编号:%d\n",Class[i].Number; printf("课程编号:%d\n",Class[i].ClassNumber; printf("课程名:%s\n",Class[i].Name; printf("讲课学时:%f\n",Class[i].TeachTime; printf("实践学时:%f\n",Class[i].PracticeTime; printf("学分:%f\n",Class[i].Credit; printf("开课学期:%s\n",Class[i].Semester; printf("考核方式:%s\n\n",Class[i].TextWay;
} fclose(fp; }
/**********退出模块*************/ void Quit( { exit(0; }

/**********New:初始化************/ void Init( { FILE *fp = fopen("Class.txt", "r"; if(fp
{ while (true
{ int ret = fscanf(fp, "%d%d%s%f%f%f%s%s\n",
&Class[g_intNum].Number, &Class[g_intNum].ClassNumber,
Class[g_intNum].Name, &Class[g_intNum].TeachTime, &Class[g_intNum].PracticeTime, &Class[g_intNum].Credit, Class[g_intNum].Semester, Class[g_intNum].TextWay; if ( Class[g_intNum].Number == '\0' break; g_intNum++; }
} fclose(fp; }
/**********主函数*************/ int main( { char c; Init(; while(1
{
int n; printf(" 欢迎进入中国地质大学(武汉)课程信息管理系统\n"; printf("*设计者:084132——周吉贤 学号:20131002431*\n"; printf("*********************菜单********************\n"; printf("* *\n"; printf("* 1:课程信息输入 2:课程信息修改 *\n"; printf("* *\n"; printf("* 3:课程信息统计 4:课程信息查询 *\n"; printf("* *\n"; printf("* 5:课程添加 6:课程信息删除 *\n";
printf("* *\n";
}

printf("* 7:浏览 8:退出 *\n"; printf("* *\n"; printf("*********************************************\n"; printf("\n\n请选择功能序号:"; scanf("%d", &n; /*对选择的数字进行判断*/ for (; n<1 || n>8;
{ printf("请输入18之间的整数:"; scanf("%d", &n;
} /*选择功能*/ switch (n
{ case 1:Input(; Display(; break; case 2:Modification(; Display(; break; case 3:Statistics(; break; case 4:Query(; break; case 5:Add(; Display(; break; case 6:Delete(; Display(; break; case 7:Display(;break; case 8:Quit(;
} printf("是否继续 Y/N\n"; fflush(stdin; scanf("%c",&c; if(c=='N' Quit(; system("cls"; } return 0;
7程序运行结果
菜单展示:

1、输入功能展示:

2、显示功能展示:


3、查询功能展示:

4、修改功能展示


5、统计功能展示

6、添加功能展示


7、删除功能展示



8.编程中遇到的困难及解决方法
在设计中遇到的问题是,知道每一个功能都能通过一个独立的函数来实现,知道课程数据用结构体形式存储,所以将其按模块编写,每个模块相对独立,互不影响,但也需一一联系起来,但在调试过程中发现有一些细节问题,进行调试调整后改过来倒没有太大困难,主要问题在于使记录编号每增加一条记录编号自动加一,需要涉及到输入模块和添加模块,一开始误以为第一次输入时自动编号应该手动输入,导致不知道在添加模块时该如何处理,后来想到使用全局变量定义,初始值为1,每操作一次自动加一,这样就解决了问题。
9.总结心得及良好建议
心得:
通过这次课程设计使我加深了对c语言函数模块的理解,和强大功能的根本所在。学到了学习借鉴他人的意见是一件很重要的事,这样可以使事情事半功倍,学到自己感觉到很神奇的一些技巧。
使我感受了一个学习过程。通过课程设计,遇到问题,找出问题的解决办法。查找资料,温习熟悉旧知识,学习心的解决问题思想。书上没有的问题提示,通过自己思考解决了问题,享受了学习的乐趣。
学以致用,通过实际的问题,运用所学的知识,通过实践中的学习,加深了学习的深度,学到了新的思想。

深入了解了函数的模块化思想和实现菜单式功能选项的方法,了解了全局变量的神奇,和信息保存读取的实际用处。
建议:
希望在以后的课堂学习中,能够有一些与考试类型相关题型的讲解,能够有一些延伸的讲解。
10.致谢
首先感谢我们c课设老师,帮助我调试程序,并且提出了一些程序上的bug使我能够再进一步地完善我的程序,力求完美。
再者是要感谢学校,感谢为我们设置这么一门很有实际意义的课程,让我们从中学到了很多,感悟了很多。



本文来源:https://www.2haoxitong.net/k/doc/c1f2a82982eb6294dd88d0d233d4b14e84243e8a.html

《C语言课程设计报告-课程信息管理系统.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式