计算机上机实习
实 习 报 告
班 级 装备11003
学 号 201005856
姓 名 郑天伦
指导教师 周志宏老师
完成日期 2011年12月26日
(一)题目的
与说明
程序要求说明:
1. 用文字处理软件(用记事本\写字板\word\tc,不能用excel)新建一个文本文件, 将本班M名学生在本学期的N门课程成绩录入到这个文件中,按如下形式存放。要求:学生人数M不少于30人,课程门数N不小于5, 姓名为本班的真实姓名, 课程中必须有一门考查课。
2. 录入本班班级学生信息,内容包含“编号 课程名称 课程学分”,录入课程学分情况;
读取原始数据文件的内容,计算每个学生的加权平均分 (保留一位小数,4舍5入) ,按平均分排名次,平均分相同则名次相同。创建一个数据文件(建议为:文本文件) ,存放班级的成绩表,按下列式形存放。计算加权平均分的
如下
3. 分别统计全班每门课的平均分。计算各分数段(<60;60~69;70~79;80~89;90以上)的学生人数。创建一个数据文件(建议为:文本文件) ,存放上述计算结果。
4. 分别统计男生和女生每门课的平均分。结果存放在一个数据文件中;
5. 输出所有存在不及格课程学生的名单,包括:学号、姓名、性别、不及格课程名称、课程学分及成绩。结果存放在一个数据文件中。
6. 输出优秀学生名单,包括:学号、姓名、性别、名门课成绩、平均分和名次。结果存放在一个数据文件中。优秀学生的条件为:
1.平均分≥90 2. 名次在本班前3名
3. 平均分≥85,并且至少有一门课的成绩为95分
4.平均分≥85,并且至少有二门课的成绩为≥90分
7.
1.平均分≥85 2. 名次在本班前20%名
3.平均分≥80,并且至少有一门课的成绩为≥95分
4.平均分≥80,并且至少有二门课的成绩为≥90分
输出优秀学生干部名单,包括:学号、姓名、性别、职务、名门课成绩、平均分和名次。结果存放在一个数据文件中。优秀学生的条件为:
题目的分析思路要点:
前期准备:分别建立三个数据文件
文件1(原始成绩数据file1.txt)用于存放学生成绩;
文件2(学生基本信息file2.txt)用于存放学生的基本信息;
文件3(课程及学分设置file3.txt)用于存放N门课程及对应的学分。
1)学生成绩管理系统
1.(定义三个结构体数组:原始数据file1.txt存放学生成绩;学生基本信息file2.txt;存放学生基本信息;课程及学分file3.txt存放课程及其学分)
2.读入原始数据并显示(将其读入另外的“成绩”,“基本信息”,”学分”中);运用数组相关的
,对汉字信息采用字符串类型的读入,对数字采用整型数组读入,同时输出相关信息,其中设定不同的指针指向文件,便于使用。
3.编写
用于计算加权平均分及名次。(将其读入另外的”名次表”中);
4.编写函数计算全班每门课程的平均分以及不同分数段的人数(将其读入另外的”每门课平均”中);
5.编写函数输出男女生课程平均分(将其读入另外的”男女生课程平均分中),运用之前输出的班级同学的平均分的文本,运用循环语句及字符串比较函数等,将性别sex与第一个男生做比较,如果比较结果相同则都为男生,输出成绩,计算男生平均分,女生也相同方式;
6.编写函数统计不及格情况,按照条件,按照科目顺序以及同学成绩遴选出不及格的同学,输出其相关的信息。(将其读入另外的”不及格表”中) ;
7.编写函数输出优秀学生按照成绩排名输出优秀学生。(将其读入另外的”优秀学生”中);
8.编写函数输出优秀学生干部(将其读入另外的”优秀学生干部.txt”中)
9.编写菜单,共有8个菜单项,其中7个为题目要求,第8个为退出函数。
2)破译密码
1.求出100-200之间的素数,作为解码的密匙。
2.根据要求编写出对应密匙的解码结果。
3.输出解码结果。
(二) 程序框图
主菜单功能模块图
破译密码
一级菜单结构图
8. 返回上级菜单
3. 统计全班每门课程的平均分
破译密码流程图
(三)源程序清单解析
# include"stdio.h"
# include"conio.h"
# include"stdlib.h"
#include
#include
#define M 36 定义一个全局变量M 36 为班级学生的人数
1.定义五个结构体类型变量,“学生成绩表”、“学生信息”、“课程与学分设置”、“汇总所有信息”、“平均分”向系统声明这是一个结构体类型,它包括成员列表中不同类型的成员。
例如:
struct student //学生成绩表
{ int num;
char name[30];
int score[5];
char kaocha[10];
}stud[M];
2.准备读入数据
void function1_1()
{printf("***************读入原始数据并显示的程序内容*****************\n");
int i;
char f1[15],f2[15],f3[15], f4[15], f5[15], f6[15], f7[15],f8[15];
char m1[15],m2[15],m3[15],m4[15],m5[15];
char n1[15],n2[15],n3[15];
文件读入举例如下:
(1)定义文件型数据的指针通过文件指针找到与它关联的文件。
例如定义:
FILE *fp,*fp1,*fp2;
(2)fp文件指向file1对应学生成绩表,打开文件时通知编译系统一下三个信息:
打开文件的名字
使用文件的方式
哪一个指针变量指向打开的文件
运用如下方式:
fp=fopen("G:\\00\\file1.txt","r"); //打开文件一,学生成绩表
if(fp==NULL)
{
printf("cannot open the file\n");
exit(0);
}
fscanf(fp,"%s%s%s%s%s%s%s%s\n",f1,f2,f3,f4,f5,f6,f7,f8);//运用格式化的方式读取文件内容
for(i=0;i