c语言实习报告—xiaoli

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

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

目录

9.1题目要求?????????????????????03 9.2需求分析?????????????????????03 9.3总体设计?????????????????????03 9.4详细设计?????????????????????04

9.4.1主函数???????????????????05 9.4.2各功能模块设计???????????????06 9.5上机操作?????????????????????14

9.5.1数据源???????????????????14 9.5.2编译、链接、运行??????????????14 9.5.3运行结果??????????????????14 9.6总结???????????????????????19 9.7参考文献?????????????????????19 9.8附录???????????????????????19

1

9.1 题目要求

假定有n门课程,每门课程有课程编号、课程名称、课程性质、总学时、授课学时、学分、开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一个选修课程系统,使之能提供以下功能:

⑴ 系统以菜单方式工作。

⑵ 课程信息和学生选课信息录入功能(课程信息用文件保存)——输入。 ⑶ 课程信息浏览功能——输出。

⑷ 查询功能(至少一种查询方法)——算法。 ⑸ 按学分查询。

⑹ 某门课程学生选修情况(可选项)。

9.2需求分析

根据题目要求,由于课程信息是用文件保存,所以应该提供文件的输入、输出等操作;在程序中需要提供课程信息录入、课程信息浏览、课程信息查询、学生选课、查看某门课程选课信息等功能操作;另外还应提供键盘式选择菜单实现功能选择。

9.3总体设计

根据上面的需求分析,可以将这个系统的设计分为课程信息录入、课程信息浏览、课程信息查询、学生选课、查看某门课程选课信息等五个模块,如图1所示。

学生选修课程系统课程信息录入课程信息浏览课程信息查询某门课程选课情况学生选课操作按课程学分查询按课程性质查询

2

图9-1

9.4详细设计

9.4.1主函数

[分析]

主函数一般设计的比较简洁,只提供输入、处理和输出部分的函数调用。其中各功能模块如图所示。其中各功能用菜单方式选择。其流程图如图2所示。将main()函数内的界面选择部分语句单独抽出作为一个独立函数。其流程图如图9-2所示。

开始 显示一系列功能选项 N 输入n,判断n是否为0-5? Y 根据n的值调用功能模块函数 结束 图9-2 主函数流程图

[程序] void menu() {

int n,w=0;

/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/ printf(\************\\n\

printf(\ MENU \\n\

printf(\

************\\n\

printf(\ 1-输入课程信息 \\n\

printf(\ 2-浏览课程信息

3

\\n\\\n\\\n\\\n\\\n\

printf(\************\\n\

printf(\ 请选择输入<0 ~ 5>:\

scanf(\

do /*对选择的数字做判断*/ {

if(n>5||n<0) { printf(\输入错误!请重新输入!\\n\ }

scanf(\ /*重新输入n*/

printf(\ 3-查询课程信息

printf(\ 4-某门选课情况

printf(\ 5-进入选课操作

printf(\ 0-退出选课系统

else w=1; }while(w==0);

switch(n)

{

case 1:insert();break; /*课程信息录入模块*/ case 2:browser();break; /*课程信息浏览模块*/ case 3:search();break; /*课程信息查询模块*/

case 4:xuanke_information();break; /*某门选课信息查询模块*/ case 5:xuan_ke();break; /*学生选课模块*/ case 0:exit(0); /*退出*/ } }

/**********************主函数**********************/ void main() {

menu(); /*菜单*/ }

9.4.2各功能模块设计

4

(1) 课程信息录入模块

[数据结构]

struct course { int num; /*课程编号*/ char name[20]; /*课程名称*/

char kind[10]; /*课程性质*/ int time; /*总时间*/ int ttime; /*授课时间*/ int etime; /*实验或上机时间*/ int mark; /*学分*/

int term; /*学期*/ };

[分析]

将课程信息用结构体存放,课程信息录入模块如图9-3所示。

开始 输入课程门数 输入课程信息,将课程信息录入文件中 返回主菜单 结束

图9-3 课程信息录入流程图

[程序]

/***********************课程信息录入模块***********************/ void insert() {

FILE *fp; struct course c; int count;

int i;

if((fp=fopen(\ /*以可加方式打开*/ {

5

printf(\

}

printf(\请输入课程门数:\

scanf(\ /*输入课程门数*/

printf(\课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学

分 开课学期:\\n\ for(i=0;i

scanf(\e,&c.mark,&c.term);

fprintf(fp,\rk,c.term); /*将课程信息写入文件*/ }

}

fclose(fp); /*关闭文件*/ menu(); /*返回主菜单*/

(2)课程信息浏览模块

[需求分析]

将课程信息从course文件中从头到尾读出就可以,具体过程如流程图9-4所示。

开始 从文件中读出课程信息 1 用户自己进行选择 2 返回主菜单 退出选课系统 结束

图9-4 课程信息浏览流程图

[程序]

/***********************课程信息浏览模块************************/ void browser()

6

{

FILE *fp; struct course c; /*将c定义为 struct course类型的结构体变量*/

int a;

if((fp=fopen(\ /*以读方式打开*/ {

printf(\}

printf(\课程目录为:\

printf(\课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学for(;!feof(fp);) /*从文件读取课程信息*/ {

fscanf(fp,\

分 开课学期:\\n\

etime,&c.mark,&c.term); printf(\me,c.mark,c.term);

}

fclose(fp);

printf(\返回主菜单;2-退出选课系统\\n\

scanf(\ if(a==1) menu(); /*返回主菜单*/ }

else exit(0); /*退出*/

(3) 课程信息查询

[需求分析]具体过程参见流程图9-5所示。

7

开始 1 请用户选择 2 按学分查询,输入所查学分 按课程性质查询,输入课程性质 从文件读取课程信息并输出 从文件读取课程信息并输出 1 用户选择 2 返回主菜单 退出系统 结束 图9-5 课程信息查询流程图

[程序]

/***********************课程信息查询模块***********************/

void search() { FILE *fp; struct course c; /*将c定义为 struct course类型的结构体变量*/

int score; /*定义学分为整型变量*/ char kind[10]; /*定义课程性质的数组*/ int a;

int b;

printf(\按学分查询,2.按课程性质查询.\\n\printf(\请选择查询方式,输入选项数字:\

scanf(\ /*输入所选查询方式*/ if(b==1)

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

8

{

if((fp=fopen(\ /*将文件以读方式打开*/

{ printf(\}

printf(\课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时

学分 开课学期:\\n\ for(;!feof(fp);) /*将文件从头到尾读取*/

{

fscanf(fp,\

me,&c.mark,&c.term); if(c.mark==score) /*如果课程信息学分和所选学分相等*/ printf(\me,c.mark,c.term); /*输出课程信息*/

}

}

else if(b==2) { printf(\请输入您要查询的课程性质:\

scanf(\

if((fp=fopen(\ { printf(\ } printf(\课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期:\\n\ for(;!feof(fp);) {

fscanf(fp,\.mark,&c.term);

if(strcmp(c.kind,kind)==0)

printf(\me,c.mark,c.term);

} else {

}

printf(\输入错误!\

exit(0); }

fclose(fp); /*关闭文件*/

9

printf(\返回主菜单;2-退出选课系统\\n\

scanf(\ if(a==1) menu(); else }

exit(0);

(4)某门选课情况查询模块

[需求分析]

具体情况参看流程图9-6所示。

开始 输入要查询的选课从文件读取所查编号的学生选课信息,每输出一个total+1 显示该门选课的总人数 1 用户选择 2 返回主菜单 退出系统 结束

图9-6 某门选课情况查询流程图

[程序]

/***********************某门课程选修情况模块***********************/ void xuanke_information() {

int total=0; /*定义选课人数total的初始值为0*/ int a;

int num; /*定义课程编号为整形变量*/

FILE *fp;

struct student s; /*将s定义为struct student 类型的变量*/ if((fp=fopen(\ {

10

printf(\

}

printf(\请输入您欲查询的选课编号:\

scanf(\ printf(\ 学号 课程编号 课程名称\\n\ }

for(;!feof(fp);) {

fscanf(fp,\if(s.cnum==num) {

total++;

printf(\

} }

printf(\选课学生总人数为:%d 人\fclose(fp);

printf(\返回主菜单;2-退出选课系统\\n\scanf(\if(a==1)

menu(); exit(0); else

(5)学生选修模块

[需求分析]

具体情况参见流程图9-7所示。

11

开始 输入学号和课程编号 读取课程信息,当学生所选编号与课程编号相符,停止 将学生选课信息录入学生文件中 提示“选课成功” 1 用户选择 2 返回主菜单 退出系统 结束

图9-7 学生选修流程图

[程序]

/***********************学生选修课程模块***********************/ void xuan_ke()

{

struct student s; struct course c;

int a;

FILE *fp;

printf(\请输入您的学号及您要选择的课程编号:\scanf(\if((fp=fopen(\ { }

for(;!feof(fp);)

printf(\

{ fscanf(fp,\etime,&c.mark,&c.term);

12

if(s.cnum==c.num) /*如果学生所选编号与课程编号

相符*/

break; }

fclose(fp);

if((fp=fopen(\{

printf(\}

fprintf(fp,\ /*从学生s文件输出学生信息,包fclose(fp);

printf(\您选课已成功!\

printf(\返回主菜单;2-退出选课系统\\n\scanf(\if(a==1)

括学号,学生选课编号,课程名称*/

menu(); else exit(0); }

9.5上机操作

9.5.1数据源

根据前面所列的数据输入形式,输入必要数据课程信息和学生信息。

9.5.2编译、链接和运行。

在完成程序编译后,点击组建按钮,然后点击“!”运行程序。

9.5.3运行结果。 (1)主菜单函数:

进入程序,效果如图5-8所示。

13

图5-8 主函数模块

(2 ) 课程信息录入模块

在主界面出现后输入1并按【Enter】键,结果如图5-9所示。

图5-9 课程信息录入模块

输入要录入的课程信息,然后按【Enter】键,回到主界面,如图5-10所示。

14

图5-10 课程信息录入模块

(3 )课程信息浏览模块

浏览课程信息,如图5-11所示。

图5-11 课程信息浏览模块

(4 )课程信息查询模块

15

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

Top