#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const unsigned MAXSTUDS = 150; // 学生人数
const unsigned MAXITEMS = 4; // 课程数目
struct student {
unsigned id; // 学号
char name[16];
double scores[MAXITEMS + 2]; // 增加平均成绩和总成绩
}stus[MAXSTUDS];
int num_stus = 0; // 当前学生人数
char filename[60] = {'\0'}; // 学生数据文件的名称
// 读磁盘数据
void ReadFile() {
int i,an;
FILE *fin;
if(filename[0] == '\0') {
printf("请输入文件名:");
fflush(stdin);
gets(filename);
}
fin = fopen(filename,"rb");
if(fin == NULL) {
printf("不能打开文件:%s\n",filename);
return;
}
if(num_stus > 0) {
do {
printf("新读入的数据将:\n1、追加到现有数据的的尾部\n2、覆盖现有数据\n");
printf("请选择:");
}while(scanf("%d",&an) != 1 || an < 1 || an > 2);
switch(an) {
case 1 : for(i = num_stus; i < MAXSTUDS && !feof(fin); ++i) {
if(fread(&stus[i],sizeof(struct student),1,fin) != 1)
break;
}
num_stus = i;
fclose(fin);
break;
case 2 : for(i = 0; i < MAXSTUDS && !feof(fin); ++i) {
if(fread(&stus[i],sizeof(struct student),1,fin) != 1)
break;
}
num_stus = i;
fclose(fin);
break;
}
}
else {
for(i = 0; i < MAXSTUDS && !feof(fin); ++i)
fread(&stus[i],sizeof(struct student),1,fin);
num_stus = i;
fclose(fin);
}
}
// 数据存盘
void WriteFile() {
int i;
FILE *fout;
if(filename[0] == '\0') {
printf("请输入文件名:");
fflush(stdin);
gets(filename);
}
fout = fopen(filename,"wb");
if(fout == NULL) {
printf("无法打开文件:%s\n",filename);
return;
}
printf("正在写文件:%s......\n",filename);
for(i = 0; i < num_stus; ++i)
fwrite(&stus[i],sizeof(struct student),1,fout);
printf("成功创建文件:%s\n",filename);
}
// 读入学生的信息,总成绩和平均成绩由计算获取
void ReadData(struct student *a,int model) { // model 1:不用读入学号,2:不用读入姓名
int i;
if(model != 1) {
printf("学号:");
scanf("%u",&a->id);
}
if(model != 2) {
fflush(stdin);
printf("姓名:");
gets(a->name);
}
printf("输入%d门成绩(空格隔开):",MAXITEMS);
a->scores[MAXITEMS + 1] = 0;
for(i = 0; i < MAXITEMS; ++i) {
scanf("%lf",&a->scores[i]);
a->scores[MAXITEMS + 1] += a->scores[i];
}
a->scores[MAXITEMS] = a->scores[MAXITEMS + 1] / MAXITEMS;
}
void Browse() {
int i,j,nopass[MAXITEMS];
double score,total[MAXITEMS];
double min[MAXITEMS]; // 各科最差成绩
double max[MAXITEMS]; // 各科最好成绩
if(num_stus == 0) return;
for(i = 0; i < MAXITEMS; ++i) {
min[i] = 100;
max[i] = total[i] = 0;
nopass[i] = 0;
}
for(i = 0; i < 27 + 8 * MAXITEMS; ++i) printf("*");
printf("\n");
for(i = 0; i < num_stus; ++i) {
printf("%05d %6s ",stus[i].id,stus[i].name);
for(j = 0; j < MAXITEMS; ++j) {
score = stus[i].scores[j];
printf("%7.2lf ",score);
total[j] += score;
if(score < min[j]) min[j] = score;
if(score > max[j]) max[j] = score;
if(score < 60) ++nopass[j];
}
printf("%7.2lf %7.2lf\n",stus[i].scores[MAXITEMS],stus[i].scores[MAXITEMS + 1]);
}
for(i = 0; i < 27 + 8 * MAXITEMS; ++i) printf("*");
printf("\n");
printf(" 最好成绩 ");
for(i = 0; i < MAXITEMS; ++i) printf("%7.2lf ",max[i]);
printf("\n");
printf(" 最差成绩 ");
for(i = 0; i < MAXITEMS; ++i) printf("%7.2lf ",min[i]);
printf("\n");
printf(" 平均成绩 ");
for(i = 0; i < MAXITEMS; ++i) printf("%7.2lf ",total[i] / num_stus );
printf("\n");
printf(" 不及格人数 ");
for(i = 0; i < MAXITEMS; ++i) printf("%7d ",nopass[i]);
printf("\n");
for(i = 0; i < 27 + 8 * MAXITEMS; ++i) printf("-");
printf("\n");
}
int HasThis(unsigned id) {
int i;
for(i = 0; i < num_stus; ++i) {
if(stus[i].id == id)
return i;
}
return -1;
}
void Insert() {
int an;
struct student *a;
do {
a = &stus[num_stus];
printf("请输入学号:");
scanf("%u",&a->id);
if(HasThis(a->id) == -1) {
ReadData(a,1);
++num_stus;
do {
fflush(stdin);
printf("0:返回,其他继续。\n");
printf("请选择:");
}while(scanf("%d",&an) != 1);
}
else printf("重复的学号:%u\n",a->id);
}while(an && num_stus < MAXSTUDS - 1);
}
void Query() {
unsigned id;
int j,res;
printf("请输入学号:");
scanf("%u",&id);
res = HasThis(id);
if(res >= 0) {
printf("%05d %6s ",stus[res].id,stus[res].name);
for(j = 0; j < MAXITEMS + 2; ++j)
printf("%7.2lf ",stus[res].scores[j]);
printf("\n");
}
else printf("没有找到学号是:%u 的学生。\n",id);
}
void Sort() {
int i,j,k;
struct student t;
for(i = 0; i < num_stus - 1; ++i) {
k = i;
for(j = i + 1; j < num_stus; ++j) {
if(stus[k].scores[MAXITEMS + 1] < stus[j].scores[MAXITEMS + 1])
k = j;
}
if(k != i) {
t = stus[i];
stus[i] = stus[k];
stus[k] = t;
}
}
}
int Erase() {
int i,res;
unsigned id;
printf("请输入学号:");
scanf("%u",&id);
res = HasThis(id);
if(res == -1) {
printf("没有找到学号是:%u 的学生。\n",id);
return 0;
}
for(i = res; i < num_stus - 1; ++i)
stus[i] = stus[i + 1];
--num_stus;
printf("删除成功。\n");
return 1;
}
int menu_select() {
int com;
char cn[20];
printf("\t1、录入\n");
printf("\t2、浏览\n");
printf("\t3、查询\n");
printf("\t4、排序\n");
printf("\t5、删除\n");
printf("\t6、读文件\n");
printf("\t7、写文件\n");
printf("\t0、退出管理系统\n\n");
printf("\t选择0 - 7:");
for(;;) {
fflush(stdin);
gets(cn);
com = atoi(cn);
if(com < 0 || com > 7) printf("输入错误,重新选择0 - 7:");
else break;
}
return com;
}
void handle_menu() {
for(;;) {
switch(menu_select()) {
case 1 : printf(">> 录入......\n"); Insert(); break;
case 2 : printf(">> 浏览......\n"); Browse(); break;
case 3 : printf(">> 查询......\n"); Query(); break;
case 4 : printf(">> 排序......\n"); Sort(); break;
case 5 : printf(">> 删除......\n"); Erase(); break;
case 6 : printf(">> 读数据文件......\n"); ReadFile(); break;
case 7 : printf(">> 数据存盘......\n");WriteFile(); break;
case 0 : printf(">> 退出管理系统\n"); return; break;
}
}
}
int main() {
handle_menu();
return 0;
}
温馨提示:内容为网友见解,仅供参考
C语言编程高手请来解决几道tc程序题
1、编写一函数,该函数的功能是统计一个班学生某门课程的平均成绩,并按照成绩的高低进行排序。要求在主函数中调用该函数。在主函数中输出该门课程的平均成绩并按照排序后的结果输出所有学生的成绩,同时找出高于平均分的学生人数。要求:学生自己完成该函数的定义。注意函数的参数和返回值,若没定义该函数,而直接在主函数...
大学生必考的证书有哪些?
英语四六级考试(CET-4&CET-6)即全国大学英语考试,是中国教育部高等教育司主管的一项全国统一的单科性、标准化英语教学考试,目的是对大学生的实际英语能力进行客观、准确的测量,为大学英语教学提供测评服务。有学历不一定有学位,有学位肯定有学历。学历是过不过四级都可以拿的,只要不犯大错误给开除...
必修课与专业课的区别?
大学的必修课主要是你的专业课和一些其他的通用课,大致有 专业课程+必修基础课程(大学英语,高等数学,体育,物理实验,军事理论,思想道德修养,马克思注意哲学,毛邓三,概率论与数理统计,大学物理,线性代数,计算机文化基础(有的有计算机C语言),工程制图,有的学校有大学语文) ,而作为理工类的选修课则是不好说的,因为选修...
丹尼斯·里奇(C语言之父)的英文介绍 要英文!要长的 不能太短!!!好的...
has placed him as an important pioneer of modern computing. The C language is still widely used today in application and operating system development and its influence is seen in most modern programming languages. Unix has also been influential, ...
数学与应用数学专业的主要课程有哪些?
当然除了这些数学类的公共必修课,还会学习《大学英语》、《计算机基础》、《毛概》等必修课。几乎所有理工类的专业,都离不开程序语言,所以大一还会学习编程语言,一般高校都开设《C语言程序设计》,最近几年,听说有些学校不学C语言了,改学Python,毕竟Pthon 现在很火。以上这几门课所有的高校都会开设...
面试时简短的自我介绍
工作积极主动、责任心强,具有很好的团队合作精神及敬业精神,能够承受较强的工作压力。尊敬的各位考官您们好:今天能够顺利通过笔试站在这里参加面试,有机会向各位考官请教和学习,我感到非常的荣幸。面试通常以应试者的自我介绍开始。当面试考官随便地间你谈谈你自己的情况如何这是面试中的第一个问题此刻你应...
2020年华北科技学院考研复试分数线
3.初试成绩符合第一志愿报考专业在《2020年全国硕士研究生招生考试考生进入复试的初试成绩基本要求(专业学位类)》一区的标准。 4.调剂考生初试科目应与学校初试科目(统考科目:政治理论、英语二、数学二,专业课:安全系统工程、C语言程序设计、地球科学概论、结构力学(1))相同或相近,调剂考生统考科目应为政治理论,英语...
高中生怎么申请澳洲留学?
二、国内高校留学项目:国内高校内开办的一些出国留学项目,学生会先在国内上1-3年的国内课程,再到国外完成其余课程,最终获得国内外的学位证书。高校开办的出国留学项目一般分为,国内一年的出国留学行前课程、国内两年的转学分课程和国内三年的HND留学项目,还有一些基于这三个项目基础上的学位延伸项目等...
我是计算机科学与技术的新生,我如何过大一呢,给点建议
很多中国留学生的英语考试成绩不错,也高分考过四级、六级、托福,但是留学美国后上课时却很难听懂课程内容,和外国同学交流时就更加困难。我们该如何学好英语呢?既然英语是最重要的沟通工具,那么,最重要的学习方法就是尽量与实践结合起来,不能只“学”不“用”,更不能只靠背诵的方式学习英语。读书时,大家尽量阅读...
对大一新生的建议和意见
1.为了期末复习时省力,课堂一定要好好听课,课后作业一定认真做,不糊弄。临近期末,将要考离散数学结构和高数还有C语言,一周学完三本大厚书,复习时hhhhh,头要秃了 2.课余时间多读书,不想读书的时候在你所在的城市里走走转转,我在北京,周末没事儿的时候会去美术馆,博物馆转转,或者书店里坐...