选课系统报告

更新时间:2024-04-10 05:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

程序设计报告

专 业:班 级:学 号:姓 名:指导教师:成 绩:

计算机工程学院

2014年6月

程序设计报告

目 录

一、 题目: 名称、内容 ...................................... 2 二、解题的基本思路 ......................................... 2 三、设计方案

功能模块框图 ........................................... 3 程序流程图等 ........................................... 3 四、算法设计

算法描述 ............................................... 9 实现方法 ............................................... 9 详细流程图 ............................................. 10 五、程序调试

调试过程与步骤 ......................................... 15 发现的问题 ............................................ 16 解决的办法 ............................................ 17 六、测试

运行程序 .............................................. 17 输入测试数据 .......................................... 18 判断是否达到预期目的 .................................. 19 注: 1.测试数据要有典型意义

2.要注意临界值的选取

3.注意测试数据的广泛性和普适性

七、总结

收获与体会 ............................................ 20 有实际内容,忌空洞无物 忌千篇一律,400字左右。

八、附录:源代码(含注释)................................... 21

- 1 -

程序设计报告

一、题目名称、内容

(学生选课管理系统设计)(第32组)

假定有n门课程,每门课程的信息包括:课程编号,课程名称,课程性质(公共课、必修课、选修课),总学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,实现以下功能:

1.课程信息录入(课程信息用文件保存,并可在电脑中直接查找并打开该文件) 2.课程信息浏览 3.课程信息查询 (1)按学分查询 (2)按课程性质查询 4.学生选修课程

学生输入学号和姓名后可进行选课。 5.统计学生选课情况

二、解题的基本思路

C语言课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验,从开始的算法思路到运行调试后的美观的图形界面以及另人兴奋的可用程序,都是一个很好的学习和锻炼的过程。使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力。使我们体会到自身知识和能力能在实际中的应用和发挥。不但可以激发创新意识,同时,还可以开发创造能力、培养沟通能力。

这次学生选修课系统管理设计时间虽然仅有一个星期,但确实使我受益非浅。通过学生选修课系统管理设计我丰富了计算机操作经验,更加深了对C语言的了解,熟悉了其环境,更增强了对Microsoft Visual C++ 6.0的使用技巧。C语言是在国内外广泛使用的一种计算机语言。语言功能丰富、表达能力强、使用灵活方便、既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件。

同时,我觉得C语言应该是操作和理论相结合的课程,在不断地编写中去思考,两者是不可分割的。我们在编写一个较大的程序时应该把它分开成几个小程

- 2 -

程序设计报告

序来看,这样会容易得多。比如说,这次的选课系统,将系统分为录入、浏览、查询、选课、统计、退出系统六个阶段。通过主函数调用各个函数,层次清晰,一眼明了,同时。为了满足多种查询的方式,将查询函数分为两个部分,按照学分查询和按照课程性质查询,这样可以避免错误。

最后,我觉得我所编出的程序的最大的优点就是输入错误后,有个重新输入的步骤,这样避免有人误选数字,而导致程序结束。同时,在程序中用printf输出如“欢迎进入”、“谢谢使用”等的敬语,更具有人性化,亲人美观的界面可以让选课者赏心悦目。同时,程序中的换行等,都可以保持界面不至于太过拥挤,大方简约。

三、设计方案,功能模块框图与程序流程图等

(1) 设计方案:通过主函数调用各个函数实现其功能,并逐步进行优化 (2) 本系统的功能模块如图所示

开 始 主 函 数 将课程信 息输入文 件 中 浏览文件中的课程信 息 按照学分查询课程信 息 按 照课 程性 质查 询 课 程 输 入学 号姓 名进 行选 课 从选课文件中统计信 息 录 入 课 程 信 息 浏 览 课 程 信 息 查 询 课 程 信 息 进 入 选 课 操 作 统 计 选 课 情 况 - 3 -

程序设计报告

(3)主要功能模块:

1.主函数:构造void main(),实现调用各个功能模块:

学生选课系统执行主流程如图所示,先执行主函数中显示菜单函数,通过循环和按键操作来执行相应的操作。按键的有效键值为0~5之间的任意数值,其他按键为无效输入,会提示“输入错误,请重新输入”,同时,再次用scanf创造再次输入的机会。各个按键的执行功能为: “1”:录入选修课课程信,调用函数luru(); “2”:浏览录入的课程信息,调用函数liulan(); “3”:查询课程信息,调用函数chaxun(); “4”:进入选课操作,调用函数chaxun(); “5”:统计选课信息,调用函数tongji(); “0”:退出系统;

int main()

{ int n; int menu(); int f1(); int luru(); int liulan(); int chaxun(); int xuanke(); int tongji(); printf(\ ********************** ***********************\ printf(\ ********** 欢迎进入学生选课系统! **********\ menu(); printf(\ printf(\ ******************* the end *********************\\n\ printf(\ ********************** ***********************\ printf(\ 请 先 选 择 1 进 行 课 程 信 息 录 入:\ scanf(\ for(;n>5||n<0;) { printf(\ 输 入 错 误 !请 重 新 输 入 !\\n \ scanf(\ } while(n>0&&n<6) { switch(n) { case 1:luru();break; case 2:liulan();break; case 3:chaxun();break; case 4:xuanke();break; case 5:tongji();break; } scanf(\ for(;n>5||n<0;) { printf(\

- 4 -

程序设计报告

}

printf(\ 输 入 错 误 ! 请 重 新 输 入 !\\n \ scanf(\ } system(\} if(n==0) { printf(\ \\n\\n\\n\\n\\n\\n\\n\ printf(\ ********** 谢谢使用! **********\\n \ printf(\}

exit(0); return 0;

2.定义menu函数,f1函数方便调用函数

函数功能及实现:此函数为输出菜单,进入系统后提示可根据供选择的项目进行后续操作。

int menu() { int n; printf(\ printf(\ 1. 录 入 课 程 信 息\\n\\n\ printf(\ 2. 浏 览 课 程 信 息\\n\\n\ printf(\ 3. 查 询 课 程 信 息\\n\\n\ printf(\ 4. 进 入 选 课 操 作\\n\\n\ printf(\ 5. 统 计 选 课 情 况\\n\\n\ printf(\ 0. 退 出 选 课 系 统\\n\\n\ return 0; }

3.定义课程、选课结构体变量

struct course { }c;

struct student {

int snum;

int cnum; char cnam[20]; char snam[20]; int num; char name[20]; char kind[20]; int ttime,mark,term;

}s[500];

4. 定义录入函数,课程信息

函数功能及实现:此函数录入课程信息,在查询、浏览、进入选课,查看选课信息等函数之前。定义指向文件的指针变量*fp,课程信息结构体c通过fopen函数建立文件”course.txt”,后输入录入课程的门数,打印表头,通过for循环,

- 5 -

程序设计报告

用scanf函数从屏幕读取课程信息,并通过fprintf函数将课程信息录入到文件“course.txt”中,最后输出主菜单,返回主程序。

int luru() { FILE *fp; struct course c; int count; int i; if((fp=fopen(\ { printf(\ exit(0); } printf(\ 请 输 入 选 择 的 课 程 门 数:\ scanf(\ printf(\ f1(); for(i=0;i

5.定义浏览函数,浏览录入的课程信息

函数功能及实现:此函数先定义指向文件的指针*fp,课程结构体变量c,通过if语句判断文件是否存在,在调用函数f1(),输出表头信息,通过for循环并使用fscanf函数将文件中的课程信息读出并通过printf打印到屏幕上,再通过fclose函数关闭文件。

int liulan()//浏览函数 { int i=0; FILE *fp; struct course c; if((fp=fopen(\ { printf(\ exit(0); } f1(); while(!feof(fp)&&i

6.定义查询函数,按照学分和课程性质查询

函数功能及实现:先定义学生结构体变量s,打印相关可供选择的选项,通过

- 6 -

程序设计报告

scanf函数读取输入字符,打印表头,再使用if语句进行相关选择。如果数“1”,则是按学分查询课程,符合第一个if语句,输入想要查询的学分,程序通过for循环从文件中读取课程信息,并通过printf函数输出满足要求的课程信息;如选择“2”,符合第二个if语句,则按照课程性质查询,输入课程性质,程序通过for循环从文件中读取课程信息,并通过printf函数输出满足要求的课程信息;如输入“3”,符合第二个if语句,则按照课程名称查询,输入要课程名称,程序通过for循环从文件中读取课程信息,并通过printf函数输出满足要求的课程信息;查询完成后通过fclose 函数关闭文件,打印主菜单,返回主函数。

int chaxun() { FILE *fp; struct course c; int score; int b,i=0; char kind[20]; printf(\ 1.按 学 分 查 询\\n\ printf(\ 2.按 课 程 性 质 查 询\ printf(\ 请 选 择 查 询 方 式 \\n\\n 输 入 选 项 数 字:\ scanf(\ for(;b<1||b>2;) { printf(\ 输 入 错 误 !请 重 新 输 入 !\\n \ scanf(\ } if(b==1) { printf(\ 输 入 你 要 查 询 的 学 分: \ scanf(\ if((fp=fopen(\ { printf(\ exit(0); } f1(); while(!feof(fp)&&i

- 7 -

程序设计报告

}

i++; } } else { printf(\输入错误!\ exit(1); }

fclose(fp); menu(); return 0;

7.定义选课函数,进入选课操作

函数功能及实现:进入此函数可进行自由选课,首先定义了学生结构体变量s,和课程结构体变量c。选课学生输入自己的学号和要选的课程,通过for循环打开文件并找到所要选择的课程,通过break跳出循环,关闭课程文件“course.txt”并将学生选课信息存入文件“student.txt”中。打印菜单信息,返回主函数。

int xuanke() { int t=0,flag; int i; /*struct course c; FILE *fp; do { printf(\ 请 输 入 学 号 姓 名 课 程 编 号 及 课 程 名 称 :\ scanf(\ if((fp=fopen(\打开文件\ { printf(\ exit(0); } while(!feof(fp)) { fscanf(fp,\ if((s[t].cnum==c.num)&&(s[t].cnam==c.name)) t++; break; } fclose(fp); printf(\ 是 否 继 续 ,是 1,否 0 \\n \ scanf(\ if((fp=fopen(\ { printf(\ exit(0); } for(i=0;i

8.定义统计函数,统计学生选课信息

函数功能及实现:此函数为查看选修课被选择的情况。定义了变量total为了统计

- 8 -

程序设计报告

选课人数,通过if语句判断是否存在文件“student.txt”,通过for循环打印出所有已选课学生的学号、选课课程编号和所选课程的名称,通过计数变量total输出已选课的人数信息。然后打印菜单,返回主函数。

int tongji()//统计函数 { int total=0; int t,i=0; FILE *fp; if((fp=fopen(\ { printf(\ exit(0); } printf(\ 学号 姓名 课程编号及课程名称\\n\ while(!feof(fp)) { fscanf(fp,\ total++; i++; } t=i; for(i=0;i

四、算法设计

(1)主函数的设计

对于主函数,通过选择操作所对应的数字,进入相应的操作,同时,在选择序号数字错误时,有提示“输入错误,请重新输入”,然后,从键盘上重新输入一个数字,继续进行相应的操作。 (注:输入的数字要在0~5之内) 算法设计如下:

S1: 从键盘上输入一个0~5的数字,进入相应的操作 S2: 如果选择序号1,则进入课程信息录入操作 S3: 如果选择序号2,则进入浏览课程信息操作 S4: 如果选择序号3,则进入查询课程信息操作 S5: 如果选择序号4,则进入学生选择课程操作 S6: 如果选择序号5,则进入统计选课情况操作 S7: 如果选择序号0,则退出学生选课管理系统

S8: 如果选择除0~5的其他操作,则提示“输入错误,请重新输入”

- 9 -

程序设计报告

然后返回S1 具体流程图如下:

是 否 继 续 进行相应的操作 输入0~5相 应的操作对应的数字 开 始 主 函 数

(2) 录入函数的设计

否 结 束 对于录入函数,就是在D盘建立一个“course.txt”文件,然后通过scanf从键盘上输入课程信息,再通过fprintf将输入的信息保存在文件中,关闭文件。 算法设计如下:

S1: 在D盘建立“course.txt”文件

- 10 -

程序设计报告

S2: 提示让学生输入选课门数 S3: 从键盘上输入课程信息并保存 S4: 当指针指向文件尾部,返回S3 具体流程图如下:

开 始

(3) 浏览函数的设计

创建文件 输入课程门数 输入课程信息 保存课程信息 是否指向尾 部 是 结 束 对于浏览函数,通过fscanf读取文件中的课程信息,然后再通过printf将信息输出 算法设计如下:

S1: 打开“course.txt”文件 S2: 读取文件中的信息 S3: 输出信息

- 11 -

程序设计报告

S4: 当指针未指向文件尾部,返回S2 具体流程图如下:

开 始 打开文件 读取课程信息 输出课程信息

结 束 是否指向尾 部 是 否 (4) 查询函数的设计

对于查询函数,输入1或2选择查询方式,如果不是,则重新输入。对于不同方式的查询,如果输入的方式与文件中有相符的,则输出查询结果

算法设计如下: S1: 选择查询方式

S2: 如果方式是学分查询,输入想查询的学分,打开文件,未指向文件尾部,如果文件中存在,则输出查询结果

S3: 如果方式是课程性质查询,输入想查询的课程性质,打开文件,未指向文件尾部,读取文件信息,如果文件中存在,则输出查询结果

- 12 -

程序设计报告

S4: 如果方式数字不存在,则退出查询 具体流程图如下: 按选择查询方式 开 始 按 课程性质 数字不正确 学 分 查询 打开文件 打开文件读取 只 显示 课程 编是否存在信息 是 否 是否指向尾 部 是 是是 输出课程信息 退出课程查询 结 束 系统 号、课程 名称 信是 否 息,不显 示结 果 读取 是否存 在信息 是否指向尾 部 输出课程信息 结 束 (5) 选课函数的设计

- 13 -

程序设计报告

对于选课函数,先从键盘上输入学号,姓名,课程编号,课程名称,打开“course.txt”文件,如果,课程存在,则进入下一步,建立“student.txt”文件,将选课信息保存在文件中,退出。 算法设计如下:

S1: 输入选课信息,包括学号,姓名,课程编号,课程名称 S2: 打开文件“course.txt” S3: 如果课程存在,则进行下一步 S4: 建立“student.txt”文件 S5: 保存选课信息

具体流程图如下:

开 始 输入选课信息 打开课程文件 是否存在课程 建立选课文件 读取选课信息保存 否 是否指向尾 部 结 束 - 14 -

程序设计报告

(6) 统计函数的设计

对于统计函数,打开“student.txt”文件,读取文件中的选课信息,输出文件中的选课信息,计数,关闭文件 算法设计如下:

S1: 打开“student.txt”文件

S2: 当未指向文件尾部,读取文件中的选课信息 S3: 输出选课信息同时计数 S4: 输出人数 S5: 结束 具体流程图如下:

结 束 是否指向尾 部 否 输出选课信息计数 读取选课信息 打开选课文件 开 始 五、程序调试

(1) 调试步骤

先进入菜单函数,选择数字进行相应的操作,然后,先进入录入函数阶段,

- 15 -

程序设计报告

通过键盘输入相应的课程信息,同时,创建一个“course.txt”文件,将输入的课程信息保存在文件中。然后,进入浏览函数阶段,先读取课程文件中的课程信息,然后将信息显示到屏幕上。接着,进入查询函数阶段,通过学分或者课程性质,查询相应的课程信息。随后,进入选课函数阶段,通过输入学号和姓名,进行选课操作,并创建一个“student.txt”文件,将选课信息保存其中。最后,进入统计函数阶段,读取选课文件中的信息,统计选课人数,并将选课信息显示在屏幕上。选择序号0退出选课系统。

(2)发现的问题

1. 在用scanf函数给普通变量输入数据时,在变量名前漏写地址运算符&。

如:scanf(“%d”,count);同时,不能少掉上引号和分号。

2. 输入数据时的数据形式与要求不符。用scanf函数输入数据时,必须注

意要与scanf语句中的对应形式匹配。

如:scanf(“%d,%d”,&x,&y);输入数据时,不能输2 3,而是应该

用2,3

3.可以用scanf输入一个字符串,如果要用它输入多个字符串,输入时,中间要用空格分开。

如:scanf(“%s%s%s”,str1,str2,str3);输入数据 how are you

4. 混淆“=”和“==” 在C语言中,“=”是赋值运算符,“==”是关系

运算符。

如:if(i==1)不能写成if(i=1) 5. 在不该出现分号的地方加了分号

如:if(x>y);在if后面是不用加分号的

6. 不能超过数组的最大值使用,在引用数组元素时,下标从0开始,即

下标的下限是0,而下标的上限值是数组定义时元素个数减1。

7. 在switch语句的各分支中未使用break语句。 如:switch(n) {

case 1:luru();break;//录入课程信息

case 2:liulan();break;//浏览课程信息 case 3:chaxun();break;//查询课程信息

- 16 -

程序设计报告

case 4:xuanke();break;//进入选课操作 case 5:tongji();break;//统计选课情况

}

8. 统计时出现中文

(2) 解决问题

1.对于语法中的错误,可以通过系统自动查出。

2.像逻辑错误,即算法中的问题,要通过不断检验算法,观察它逻辑中的错误。同时对于运行中出现中文的问题,是因为对于数组的未初始化或者定义空间过小等出现的。

3.对于可以创建,但是无法链接的问题,可能是未关闭运行窗口,或出现拼写中的错误,还有,像字符串的前面是不用加地址符的。

4.还有,出现最后一行多输出一次的问题,那就是在循环里面,应该先检

查它所在的文件中是否多有一行,如果文件中多一行,那就是保存时出现问题,如果是文件中是正确的,那问题就可能出现在输出函数时,循环中多进行一次

六、测试

(1)、主菜单界面

- 17 -

程序设计报告

(2)、录入课程信息:

(3)、浏览课程信息:

(4)、查询课程信息

a.按照学分查询:

b.按照课程性质查询:

- 18 -

程序设计报告

(5)、进入选课操作:

(可以多次选择)

(6)、统计选课信息

- 19 -

程序设计报告

(7)退出选课系统

(按0退出操作系统)

七、总结:

为了更好的复习C语言的基础知识,进一步加深对C语言编程的理解,老师给每个人布置了完成一个操作系统的任务。这对于我们来说,无疑是一个巨大的挑战。因为链表是刚刚学习的,还不太熟练,我选择了用结构体和数组来构建我的系统。我知道,对于链表,我们应该熟练掌握,但是,在以后,我会多看书,加深对链表的理解。而且,通过这次作业,我懂得了如何做一个完整的系统,我明白一个好的系统,是要分成很多模块,而不是单纯的堆叠在一个主函数里,对于同一种性质的,最好将他们放在另外一个函数里,方便多次调用,并且,避免了不必要的繁琐。自己编一个程序,才了解到其中的不易,每次出错,都会揪心,每次解决小小的问题,就会情不自禁的欢喜,看到错误栏显示的错误不断变少,就感觉成功更进一步。虽然我的程序没有用到很复杂的东西,但是,我觉得,我编的程序还算层次分明,每个模块分工详细,各尽所能。

而且,我还了解到独立思考的重要性。平时,上机课,我们都是习惯性的将书上的程序照原样打一遍,这样,并不能锻炼到我们的能力,而是,成为了一个单纯的打字员。所以,我们应该改变这种方式,我们应该学着自己思考问题,想想算法,如何实现各个模块的链接,如何通过循环读取一系列数据,然后将它保存,另外存在文件中,然后再读取。

另外,我还掌握了有关文件的一些知识,例如,定义指向文件的指针,文件的保存,文件的读取,文件的格式,读写文件,只读文件,只写文件,指向末尾的文件等等。还掌握了文件中的一些函数与普通的区别。fscanf和scanf的区别,fprintf与printf的区别,还有标准库函数stdio与stdlib的区别,库函数中的清屏,

- 20 -

程序设计报告

退出程序的函数,随机函数等,字符串调用函数,对字符串比较,字符串的复制,以前,不会那么详细的去了解这些知识,但是,自从编了这个程序之后,就要不断翻书,加深对这些边边角角的知识的理解,而不仅限于开始的了解。经过看书之后,对那些函数有了更深的理解。

还有,我明白在任何事情中都要细心。无论是在程序设计方面还是其他方面。每一个细微的错误,就可能导致程序无法运行,即使是一个小小的标点符号也不可忽视。同时,我掌握了检查错误的一个小窍门。就是将错误细化,可能一个程序中包含很多个函数,我每次出现问题时,都将每个函数单独提出来,那样就可以将错误细化到很小的部分,毕竟程序那么多,那么复杂,从头到尾都看过来,那是很困难的。但是将他们分开,就可以避免这个问题。还有,比如说像输出结果多一行的问题,本来是毫无头绪,而后来,将问题细化,发现了问题的共性,发现都是指向文件尾部的指针那里,对于指向尾部这个条件,每次出现这个条件时,系统浏览出来的数据,或者查询的数据,最后一行都是会重复输出一遍,这时,我在保存文件的后面加了一个printf函数,这样,就可以知道,到底在文件保存之后,有没有出问题。如果在文件保存之后出现问题,那就是下面读取时有错误,但是,如果是没有问题,那就是保存文件的问题。最后,发现都没有问题,而且打开文件后,发现,保存的文件都没有问题。才发现原来是输出循环出现问题,并且问题都是共性的。都是使用while(!feof(fp))这个条件时,没有注意到这个指向文件末尾的函数,在指向文件末尾后,会再输出一次,然后,我找到了解决的方法,定义一个count 表示课程门数,用i

最后,我发现,C语言真的是很复杂的,但是,如果我们用心去学,也能学的很好,世界上没有做不了的事,只要看我们有没有付出努力,我们努力过了,即使不成功,那也没有遗憾,以后,一定要好好看书,争取攻克C语言

八、附录

****************** 欢迎使用本软件 ******************

**************************** ***************************

- 21 -

程序设计报告

#include #include #include struct course { int num; char name[20]; char kind[20]; int ttime,mark,term;

}c;

struct student { int snum; int cnum; char cnam[20];

char snam[20]; }s[500];

int count;//全局变量 int main()//主函数 { int n; int menu(); int f1(); int luru(); int liulan(); int chaxun(); int xuanke(); int tongji();

printf(\ ********************** ***********************\ printf(\ ********** 欢迎进入学生选课系统! **********\ menu(); printf(\

printf(\ ******************* the end *********************\\n\ printf(\ ********************** ***********************\ printf(\ 请 先 选 择 1 进 行 课 程 信 息 录 入:\ scanf(\防止错误,请重新输入 for(;n>5||n<0;) { printf(\ 输 入 错 误 !请 重 新 输 入 !\\n

scanf(\

}

while(n>0&&n<6)

{

- 22 -

\

程序设计报告

switch(n) {

case 1:luru();break;//录入课程信息 case 2:liulan();break;//浏览课程信息 case 3:chaxun();break;//查询课程信息 case 4:xuanke();break;//进入选课操作 case 5:tongji();break;//统计选课情况 }

scanf(\选择所需操作 for(;n>5||n<0;) { printf(\

printf(\ 输 入 错 误 ! 请 重 新 输 入 !\\n scanf(\防止错误,提示重新输入

}

system(\清屏

} if(n==0) { printf(\ \\n\\n\\n\\n\\n\\n\\n\

printf(\ ********** 谢谢使用! **********\\n printf(\

}

exit(0);//退出选课系统 return 0;

}

int menu()//菜单函数 { int n;

printf(\

printf(\ 1. 录 入 课 程 信 息\\n\\n\ printf(\ 2. 浏 览 课 程 信 息\\n\\n\ printf(\ 3. 查 询 课 程 信 息\\n\\n\ printf(\ 4. 进 入 选 课 操 作\\n\\n\

printf(\ 5. 统 计 选 课 情 况\\n\\n\printf(\ 0. 退 出 选 课 系 统\\n\\n\ return 0; } int f1() { printf(\ 课程编号 课程名称 课程性质 总学时 学分 开课学期:\\n\ return 0;

}

int luru()//录入函数 {

- 23 -

\\

程序设计报告

}

int liulan()//浏览函数 { }

int chaxun()//查询函数 {

FILE *fp;//定义指向文件的指针

- 24 -

int i=0;

FILE *fp;//定义指向文件的指针 struct course c;//定义课程结构体变量

if((fp=fopen(\打开文件\{ } f1();

while(!feof(fp)&&i

fclose(fp);//关闭文件 menu(); return 0;

fscanf(fp,\printf(\i++;

printf(\exit(0);

FILE *fp;//定义指向文件的指针 struct course c; int i;

if((fp=fopen(\建立文件\{ }

printf(\ 请 输 入 选 择 的 课 程 门 数:\scanf(\printf(\f1();

for(i=0;i

fclose(fp);//关闭文件

printf(\ ********* 录入成功!*********\\n\menu(); return 0;

scanf(\fprintf(fp,\printf(\exit(0);

程序设计报告

struct course c;//定义课程结构体变量 int score; int b,i=0; char kind[20];

printf(\ 1.按 学 分 查 询\\n\printf(\ 2.按 课 程 性 质 查 询\

printf(\ 请 选 择 查 询 方 式 \\n\\n 输 入 选 项 数 字:\scanf(\防止错误,提示重新输入 for(;b<1||b>2;) {

printf(\ 输 入 错 误 !请 重 新 输 入 !\\n \scanf(\

}//按学分查询 if(b==1) { }

else if(b==2)//按课程性质查询 {

printf(\ 输 入 你 要 查 询 的 课 程 性 质:\scanf(\

if((fp=fopen(\打开文件\{ } f1();

while(!feof(fp)&&i

fscanf(fp,\if(strcmp(c.kind,kind)==0)//比较输入的字符串与原文件中的课程性质,如果相同, 输出那组数据

- 25 -

printf(\

printf(\ 输 入 你 要 查 询 的 学 分: \scanf(\

if((fp=fopen(\{ } f1();

while(!feof(fp)&&i

fscanf(fp,\if(c.mark==score)//比较输入的分数和结构体中的分数,如果相同,输出那组数据 i++;

printf(\printf(\exit(0);

程序设计报告

}

int xuanke()//选课函数 {

int t=0,flag; int i;

FILE *fp;//定义指向文件的指针 do {

printf(\ 请 输 入 学 号 姓 名 课 程 编 号 及 课 程 名 称 :\if((fp=fopen(\打开文件\{ }

while(!feof(fp))//如果课程编号和课程名称与学生所选一致,就跳出,执行下一步 { }

fscanf(fp,\

t++; break;

if((s[t].cnum==c.num)&&(s[t].cnam==c.name))

printf(\exit(0); } else { } fclose(fp); menu(); return 0;

printf(\输入错误!\选择错误,就退出 exit(1); }

printf(\

i++;

scanf(\

fclose(fp); scanf(\

if((fp=fopen(\建立文件“student.txt” {

printf(\exit(0);

} //建立,并将学生选课信息输入\for(i=0;i

fprintf(fp,\

printf(\ 是 否 继 续 ,是 1,否 0 \\n \

fclose(fp);//关闭选课文件\

- 26 -

程序设计报告

}

int tongji()//统计函数 { }

int total=0; int t,i=0; FILE *fp;

if((fp=fopen(\打开文件“student.txt” { }

printf(\ 学号 姓名 课程编号及课程名称\\n\while(!feof(fp))//计数 { } t=i;

for(i=0;i

printf(\printf(\ 选课学生总人数为:%d人\fclose(fp);//关闭文件 menu(); return 0;

fscanf(fp,\读取文件“student.txt” total++; i++;

printf(\exit(0); }while(flag);

printf(\ ********* 恭喜选课成功!*********\\n\menu(); return 0;

****************** 感谢使用本软件 ****************** **************************** ***************************

完成时期 :2014年6月22日

- 27 -

本文来源:https://www.bwwdw.com/article/tq3r.html

Top