实验项目指导书
更新时间:2023-08-28 12:17:01 阅读量: 教育文库 文档下载
。
实验项目指导书
实验项目名称: 学生成绩管理系统
实验类型: 综合型
所属课程:计算机程序设计基础(C) 所属实验室:计算机基础实验中心 适用专业:机电学院、理学院各专业
刘明才2010年6月1日
。
目 录
实验项目指导书 ............................................................................................................................... 1
1.实验目的 ............................................................................................................................. 3 2.实验准备 ............................................................................................................................. 3 3.实验内容 ............................................................................................................................. 3 4.实验步骤 ............................................................................................................................. 3
4.1分析问题 ..................................................................................................................... 3 4.2编写主函数 ................................................................................................................. 4 4.3编写输入记录函数 ..................................................................................................... 8 4.4编写显示记录函数 ..................................................................................................... 9 4.5编写排序函数 ........................................................................................................... 10 4.6编写统计数据函数 ................................................................................................... 11 4.7编写向文件中写记录函数 ....................................................................................... 13 4.8编写从文件中读记录函数 ....................................................................................... 14 5.功能扩充 ........................................................................................................................... 15 6.撰写实验报告 ................................................................................................................... 16
。
1.实验目的
(1)通过实验了解较大程序的设计方法。 (2)掌握结构化程序设计方法。
2.实验准备
(1)预习第9章结构体类型的定义和结构体变量的定义与引用。 (2)预习第10章文件指针变量的定义以及与文件操作有关的函数 (2)了解实验内容。
3.实验内容
编写一个综合的学生成绩管理程序。学生信息包括:学号、姓名、成绩。一个学生的信息称为一个记录,程序要求实现以下功能:
(1)输入记录 (2)显示记录
(3)按学号排序记录
(4)输出统计信息:总记录数、最高分、最低分及平均分 (5)从文件读取记录 (6)将记录写入文件
4.实验步骤
4.1分析问题
从题目要求可知,每个学生的记录包括下面3个属性:学号、姓名和成绩。每个属性需要用不同的数据类型表示,学号可以用整数表示,也可以用字符串表示,本题用字符串表示,姓名必须用字符串表示,成绩可用整数表示。所以每个学生的记录可用一个结构体表示:
struct student { char num[10]; char name[20]; int score; }
所有学生的记录用一个结构体数组表示。从题目所要求的功能看,可编写六个函数分别完成相应的功能,如图1所示:
。
根据以上分析,程序设计步骤如下:
(1)编写主函数,由主函数调用其它函数。 (2)编写输入记录的函数。 (3)编写显示记录的函数。 (4)编写记录排序的函数。 (5)编写统计数据函数。
(6)编写从文件读取记录函数。 (7)编写将记录写入文件函数。
4.2编写主函数
1.编写主函数main
为了使程序即能在TC2.0环境运行,又能在VC++6.0环境下运行,提示信息用英文表示。主函数运行时,首先在屏幕上显示如下提示(菜单):
***************************************** Students' score management system 1. Input records
2. Display all records 3. Sort by number 4. Statistic
5. Read from a Text File 6. Write to a Text file 0. Exit
***************************************** Input your choice(0-9):
程序根据用户输入的选择(0—9)调用相应的函数。 程序如下:
#include<stdio.h> #include<stdlib.h> #include<string.h>
/* 定义结构体类型STU */
图1
。
typedef struct { char num[10]; /* 学号 */ char name[20]; /* 姓名 */ int score; /* 成绩 */ }STU;
STU stu[80]; /* 定义结构体数组 */ /* 输入记录函数Input */ /* 显示记录函数Display */ /*记录排序函数Sort_by_num */ /*统计数据函数Statistic */
/*从文件读记录函数Read_from_file */ /*向文件写记录函数Write_to_file */
void main() /* 主函数 */
{ int n=0; /* 存放记录个数 */
char c; /* 存放用户选择的数字字符 */
for(;;) { do{
system("cls"); /* 清屏幕函数 */
printf("*****************************************\n"); printf(" Students' score management system \n"); printf(" 1. Input records \n");
printf(" 2. Display all records \n"); printf(" 3. Sort by number\n"); printf(" 4. Statistic \n");
printf(" 5. Read from a Text File\n");
printf(" 6. Write to a Text file \n"); printf(" 0. Exit \n");
printf("*****************************************\n"); printf("Input your choice(0-9):"); c=getchar();
}while(c<'0'||c>'9'); /* 若输入的不是数字字符,则重新输入 */
switch(c) { case '1':
printf("Input Records\n"); /* 输入若干条记录 */ /* 调用输入记录函数*/ system("pause"); break; case '2':
printf("Display All Records\n"); /* 显示所有记录 */ /* 调用显示记录函数*/ system("pause");
。
break; case '3':
printf("Sort\n");
/* 调用排序函数*/
printf("Sort Succeeded!\n"); system("pause"); break; case '4':
printf("Statistic\n");
/* 调用统计数据函数*/ system("pause"); break; case '5':
printf("Read from a file\n"); /* 调用读文件函数*/ system("pause"); break; case '6':
printf("Write to a Text file\n"); /* 调用写文件函数*/ system("pause"); break; case '0':
printf("Have a Good Luck,Bye-bye!\n"); /* 结束程序 */ system("pause"); exit(0); } } }
2.调试主函数
将上述程序在TC2.0环境下进行调试运行。
程序运行后,屏幕显示如图2所示的主菜单选项:
图2
。
输入1并按回车键后,屏幕显示如图3所示:
图3
按任意键后,回到主菜单,如图2所示。 输入2并按回车键后,屏幕显示如图4所示:
图4
按任意键后,回到主菜单,如图2所示。 输入3并按回车键后,屏幕显示如图5所示:
图5
按任意键后,回到主菜单,如图2所示。 输入4并按回车键后,屏幕显示如图6所示:
图6
按任意键后,回到主菜单,如图2所示。 输入5并按回车键后,屏幕显示如图7所示:
图7
按任意键后,回到主菜单,如图2所示。 输入6并按回车键后,屏幕显示如图8所示:
图8
按任意键后,回到主菜单,如图2所示。 输入0并按回车键后,屏幕显示如图9所示:
图9
按任意键后,退出程序。
。
4.3编写输入记录函数
1.编写输入记录函数Input 函数编写如下: /* Input函数
功能:输入若干个记录。
参数:从结构体数组元素stu[n]开始输入,n表示原有记录个数。 返回值:输入的记录个数。 */
int Input(STU stu[],int n)
{ int i=0; /* 统计输入记录的个数 */
char sign; /* 存放用户输入的选择Y/N */ char x[10]; /* x[10]为清除多余的数据所用 */ while(sign!='n'&&sign!='N') { printf("student's num:"); scanf("%s",stu[n+i].num); printf("student's name:"); scanf("%s",stu[n+i].name); printf("student's score:"); scanf("%d",&stu[n+i].score); gets(x); /* 清除多余的输入 */
printf("any more records?(Y/N)"); /* 选Y输入下一个记录,选N输入结束 */ scanf("%c",&sign); i++; }
return(n+i); }
2.调试程序
(1)将输入记录函数Input插入到main函数前的注释部分
/* 输入记录函数Input */
处。
(2)在main函数中的switch语句中的注释部分
/* 调用输入记录函数*/
处插入语句
n=Input(stu,n);
(3)程序运行结果如图10所示。
。
图10
按任意键后,返回主菜单,如图2所示。
4.4编写显示记录函数
1.编写显示记录函数Display 函数编写如下: /* Display函数
功能:显示记录
参数:从结构体数组元素stu[0]开始输出n个记录 返回值:无 */
void Display(STU stu[],int n) { int i;
printf("%-15s%-15s%-15s\n","number","name","score"); for(i=0;i<n;i++)
{ printf("%-15s%-15s%-15d\n",stu[i].num,stu[i].name,stu[i].score);
if(i>0&&i%20==0) system("pause"); /* 每输出20个记录暂停 */ }
system("pause"); }
2.调试程序
(1)将显示记录函数Display插入到main函数前的注释部分
/* 显示记录函数Display */
。
处。
(2)在main函数中的switch语句中的注释部分
/* 调用显示记录函数*/
处插入语句
Display(stu,n);
(3)程序运行后,按图10所示输入3个记录,按任意键后,返回主菜单。当输入2后,屏幕显示结果如图11所示。
图11
按任意键后,返回主菜单,如图2所示。
4.5编写排序函数
1.编写排序函数Sort_by_num /* Sort_by_num函数 功能:按学号排序
参数:对结构体数组stu的前n个元素排序 返回值:无 */
void Sort_by_num(STU *stu,int n) { int i,j;
STU temp;
for(i=0;i<n-1;i++) /*冒泡法排序*/ for(j=0;j<n-1-i;j++)
if(strcmp(stu[j].num,stu[j+1].num)>0) { temp=stu[j]; stu[j]=stu[j+1]; stu[j+1]=temp; } }
2.调试程序
(1)将排序函数Sort_by_num 插入到main函数前的注释部分
/*记录排序函数Sort_by_num */
处。
。
(2)在main函数中的switch语句中的注释部分
/* 调用排序函数*/
处插入语句
Sort_by_num(stu,n);
(3)程序运行后,按图10所示输入3个记录,按任意键后,返回主菜单。当输入3后,屏幕显示结果如图12所示。
图12
按任意键后,返回主菜单,如图2所示。再输入2,屏幕显示如图13所示。
图13
4.6编写统计数据函数
1.编写统计数据函数Statistic /* Statistic函数
功能:输出统计信息:总记录数、最高分、最低分及平均分 参数:统计结构体数组stu的前n个记录 返回值:无 */
void Statistic(STU stu[],int n)
。
{ int i,j=0,k=0,sum=0; float aver;
for(i=0;i<n;i++) { sum+=stu[i].score;
if(stu[j].score>stu[i].score) j=i; if(stu[k].score<stu[i].score) k=i; }
aver=1.0*sum/n;
printf("there are %d records.\n",n); /*总记录数*/ printf("the hignest score:\n"); /*最高分*/
printf("number:%s name:%s score:%d\n",stu[k].num,stu[k].name,stu[k].score); printf("the lowest score:\n"); /*最低分*/
printf("number:%s name:%s score:%d\n",stu[j].num,stu[j].name,stu[j].score); printf("the average score is %5.2f\n",aver); /*平均分*/ }
2.调试程序
(1)将统计数据函数Statistic插入到main函数前的注释部分
/*统计数据函数Statistic */
处。
(2)在main函数中的switch语句中的注释部分
/* 调用统计数据函数*/
处插入语句
Statistic(stu,n);
(3)程序运行后,按图10所示输入3个记录,按任意键后,返回主菜单。当输入4后,屏幕显示结果如图14所示。
图14
按任意键后,返回主菜单,如图2所示。
。
4.7编写向文件中写记录函数
1.编写向文件中写记录函数Write_to_file /* Write_to_file函数
功能:将记录写入文件
参数:将数组stu的前n个记录写入文件 返回值:无 */
void Write_to_file(STU stu[],int n) { int i=0;
FILE *fp; /* 定义文件指针 */ char filename[20]; /* 定义文件名 */
printf("Write Records to a Text File\n"); /* 输入文件名 */ printf("Input the filename:"); scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL) /* 打开文件 */ { printf("cann't open the file\n"); system("pause"); return; }
fprintf(fp,"%d\n",n); /* 写入记录个数 */ while(i<n)
{ fprintf(fp,"%-16s%-15s%d\n",stu[i].num,stu[i].name,stu[i].score); i++; }
fclose(fp); /* 关闭文件 */
printf("Successed!\n"); /* 返回成功信息 */ }
2.调试程序
(1)将向文件中写记录函数Write_to_file插入到main函数前的注释部分
/*向文件写记录函数Write_to_file */
处。
(2)在main函数中的switch语句中的注释部分
/* 调用写文件函数*/
处插入语句
Write_to_file(stu,n);
(3)程序运行后,按图10所示输入3个记录,按任意键后,返回主菜单。当输入6后,屏幕提示输入存放数据的文件名,如输入student,并按回车,屏幕显示结果如图15所示。
。
图15
按任意键后,返回主菜单,如图2所示。
4.8编写从文件中读记录函数
1.编写从文件中读记录函数Read_from_file /* Read_from_file函数
功能:从文件中读取数据
参数:从数组元素stu[n]开始输入 返回值:记录个数 */
int Read_from_file(STU stu[],int n) { int i=0,num; FILE *fp; /* 定义文件指针 */ char filename[20]; /*定义文件名*/ printf("Input the filename:");
scanf("%s",filename); /*输入文件名*/ if((fp=fopen(filename,"r"))==NULL) /*打开文件*/ { printf("cann't open the file\n"); /*打开失败信息*/ system("pause"); return(n); } fscanf(fp,"%d",&num); /*读入总的记录个数*/ while(i<num)
{ fscanf(fp,"%s%s%d",stu[n+i].num,stu[n+i].name,&stu[n+i].score); i++; }
n+=num; fclose(fp); /*关闭文件*/ printf("Successed!\n"); system("pause");
。
return(n); }
2.调试程序
(1)将从文件中读记录函数Read_from_file插入到main函数前的注释部分
/*从文件读记录函数Read_from_file */
处。
(2)在main函数中的switch语句中的注释部分
/* 调用读文件函数*/
处插入语句
n=Read_from_file(stu,n);
(3)程序运行后,出现主菜单。当输入5后,屏幕出现提示信息:输入文件名,如输入文件名student,并按回车后,屏幕显示结果如图16所示。
图16
按任意键后,返回主菜单,如图2所示。 至此,整个程序输入并调试完毕。
5.功能扩充
同学们可在上述实验的基础上进行修改和功能扩充。例如: (1) 编写函数,其功能是删除用户指定的记录。 (2) 编写函数,其功能是查找某记录。 (3) 编写函数,其功能是按成绩排序。 以及其它功能。
本例采用静态结构体数组存放学生记录,其优点是程序设计简单,思路清楚,容易实现,缺点是数组的大小是在程序中固定的,要想改变大小,就要改写程序。如果用链表存放学生记录,则灵活性较大,通用性强,学生可尝试用动态链表方式编写学生成绩管理程序。
。
6.撰写实验报告
学生做完该实验后要撰写实验报告,其格式如下:
计算机程序设计基础(C)实验报告
一、实验目的
二、实验内容
三、设计方法
四、源程序
五、测试数据
六、实验心得
七、教师评语
正在阅读:
实验项目指导书08-28
2012-12 复习05-31
2022全国高考理科数学试题和答案解析04-08
退休临别赠言02-11
阅读三体心得体会2022年04-04
海底两万里 - 总题库 四年级下12-10
14.2探究欧姆定律11-29
2015南雅-语112-10
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 指导书
- 实验
- 项目
- 蒙牛公司的冷链物流
- 清肺止血汤治疗支气管扩张合并感染58例
- 南昌大学 2008~2009学年第二学期期末考试试卷测试A参考答案
- 2018-2024年中国环保服务市场深度评估与投资机遇预测报告(目录)
- 自由回忆和线索回忆测验中的系列位置效应
- 高数(高等教育出版社)第一版,第一章 函数与极限习题详解
- 材料作文如何使用材料
- 上海市教育委员会文件
- 丰富多彩的情绪说课稿(1)
- 冀教版八年级英语上册期末试卷
- 农夫乐园商业计划书
- 106-002 二类医疗器械产品注册证核发(重新注册)
- 看图说话猫捉老鼠
- 郑州枫杨外国语学校2012年小升初数学试题及答案1
- 初中数学竞赛培训总结
- 第一章 保险会计总论
- 信贷检查办法
- 科教版八年级物理上学期期中测试题B卷
- 电商发展趋势电子商务初级培训
- Disk Instabilities and Cooling Fronts