C语言学习知识生成绩查询系统2.doc
!-实训目的能力目标全面熟悉、掌握C语言基本知识,掌握C程序设计中数组、函数、指针的操作,把编程和实际结合起来,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,规范编程思想,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。实训要求:(1) 掌握C语言中的基本数据输入、输出;(2) 熟练使用C语言中的数组;(3) 熟练使用C语言中的函数;(4) 熟练使用C语言中的指针;(5) 熟练使用C语言中的结构体。实训内容(过程及步骤)设计题目:学生成绩查询系统1、基本思路:以数组为基础,加以函数和结构体。然后程序分由“输入学生成绩”,“输出学生成绩”,“查询学生成绩”,“修改学生成绩”, “查看成绩排序”,“查看成绩统计保存数据”, “读取数据”等等这几大部分组成。这五部分各自用一个程序列出,然后在用其他函数将他们连接起来。2、程序:#include<stdafx.h>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<conio.h>#define N 10/*定义结构体*/typedef struct students /*标记为students*/ char num10; /*学生学号*/ char name10; /*学生姓名*/ int age; /*年龄*/ char sex10; /*性别*/ float cyy; /*C语言成绩*/ float computer; /*计算机成绩*/ float english; /*英语成绩*/ float pj; /*平均成绩*/STU;STU temp;void sort(STU students,int n); /排序void save(STU students,int n);/导出int Locate(STU students,int n);/查询/*-显示菜单-*/char displaymenu() char k; system("cls"); printf(" 学生成绩管理 n"); printf("-应用菜单-n"); printf(" 1 输入学生成绩nn"); printf(" 2 输出学生成绩nn"); printf(" 3 查询学生成绩nn"); printf(" 4 修改学生成绩nn"); printf(" 5 查看成绩排序nn"); printf(" 6 查看成绩统计nn"); printf(" 7 保存数据nn"); printf(" 8 读取数据nn"); printf(" 9 退出系统nn"); printf(" 请选择你想进行的操作:"); k=getchar(); return k;/*定义输出函数*/void printheader() /*格式化输出表头*/ printf("nn*学生成绩管理系统*nnn"); printf("| 学号| 姓名 | 年龄| 性别| C语言成绩|计算机成绩| 英语成绩| 平均成绩| n"); void printdata(STU pp) /*格式化输出表中数据*/ STU* p; p=&pp; printf("| %-5s| %-5s | %-4d| %-4s| %-6.0f| %-6.0f| %-5.0f| %-6.0f|n",p->num,p->name,p->age,p->sex,p->cyy,p->computer,p->english,p->pj);/*添加学生信息*/int add(STU students ,int *n) int i=0; system("cls"); printf(" n"); printf(" 请输入学生信息 n"); printf(" 退出请在学生号处输入:0 n"); printf("请输入学生学号:n "); scanf("%s",studentsi.num); while(strcmp(studentsi.num,"0") )/当输入的学号为时结束输入 printf("请输入学生姓名:n "); scanf("%s",studentsi.name); printf("*nnn"); printf("请输入学生年龄:n "); scanf("%d",&studentsi.age); printf("*nnn"); printf("请输入学生性别:n"); scanf("%s",studentsi.sex); printf("*nnn"); printf("请输入C语言成绩:n "); scanf("%f",&studentsi.cyy); printf("*nnn"); printf("请输入计算机成绩:n "); scanf("%f",&studentsi.computer); printf("*nnn"); printf("请输入英语成绩:n "); scanf("%f",&studentsi.english); printf("*nnn"); studentsi.pj=(studentsi.cyy+studentsi.computer+studentsi.english)/3; printf("学生平均成绩: %-8.0fn",studentsi.pj); i+; printf("*nnn"); printf("请输入学生学号:n "); scanf("%s",studentsi.num); *n=i; save(students ,i); return i; /*查询学生信息函数*/int Locate(STU students,int n) int k,m=-1; char num10,name20; int i=0; system("cls"); printf(" 退出请输入:0 n"); printf("请选择以什么方式查询:1).按学生学号查询 2).按学生姓名查询 n"); scanf("%d",&k); if(k=1) printf("请输入你要查询的学生学号:n"); scanf("%s",num); while(i<n) if(strcmp(studentsi.num,num)=0) /*若找到学号*/ printf(">>学生学号:%sn*学生姓名:%sn*学生年龄:%dn*学生性别:%sn>C语言成绩:%-8.0fn>计算机成绩:%-8.0fn>>英语成绩:%-8.0fn>>平均成绩:%-8.0fn",studentsi.num,studentsi.name,studentsi.age,studentsi.sex,studentsi.cyy,studentsi.computer,studentsi.english,studentsi.pj); m=i; getchar(); break; i+; if(i>=n) printf("没有所找学生信息n"); getchar(); else if(k=2) printf("请输入你要查询的学生姓名:n"); scanf("%s",name); while(i<n) if(strcmp(studentsi.name,name)=0) /*若找到姓名*/ printf("学生学号:%sn学生姓名:%sn学生年龄:%dn学生性别:%sn学生C语言成绩:%-8.0fn计算机成绩:%-8.0fn英语成绩:%-8.0fn平均成绩:%-8.0fn",studentsi.num,studentsi.name,studentsi.age,studentsi.sex,studentsi.cyy,studentsi.computer,studentsi.english,studentsi.pj); m=i; getchar(); break; i+; if(i>=n) printf("没有所找学生信息n"); return m;/*返回一个根m便于修改学生信息*/ getchar();/*显示函数*/ void input(STU students,int n) int i; system("cls"); /清屏 if(n=0) /*表示没有学生信息记录*/ printf("n没有学生记录!n"); printf("nn"); printheader(); /*输出表格头部*/ i=0; while(i<n) /*逐条输出数组中存储的学生信息*/ printdata(studentsi); i+; getchar(); /*修改子程序*/void Modify(STU students,int n) int i; if(n<=0) system("cls"); printf(" n退出请输入:0 n"); printf("n-not found!-n"); getchar(); return ; system("cls"); printf("修改学生信息"); input(students,n); i=Locate(students,n); /*查询到该数组元素,并返回下标值*/ if(i!=-1) /*若i!=,表明已经找到该数组元素*/ printf("请输入新的学生信息: n"); printf(" 学号: "); scanf("%s",studentsi.num); printf(" 姓名: "); scanf("%s",studentsi.name); printf(" 年龄: "); scanf("%d",&studentsi.age); printf(" 性别: "); scanf("%s",studentsi.sex); printf(" C语言: "); scanf("%f",&studentsi.cyy); printf(" 英语: "); scanf("%f",&studentsi.english); printf(" 计算机: "); scanf("%f",&studentsi.computer); studentsi.pj=(studentsi.cyy+studentsi.english+studentsi.computer)/3; printf("平均成绩: %-9.0fn",studentsi.pj); save(students ,n); printf("n-修改成功!-n"); else printf("not found!n"); getchar();/*学生成绩排序子程序*/ void sort(STU students,int n) int i,j,a,b,c,d,e,f,k; float p; printf(" n退出请输入:0 n"); printf("成绩排序方式选择: 1.按C语言 2.按英语 3.按平均 n "); scanf("%d",&k); if(k=1) /*用选择法对C语言排序*/ for(i=0; i<n; i+) for(j=0;j<n-1;j+) if(studentsi.english<studentsj+1.english) temp=studentsi; studentsi=studentsj+1; studentsj+1=temp; else if(k=2)/*英语用冒泡法*/ for(a=0; a<n-1; a+) c=a; for(b=a+1; b<n; b+) if(studentsb.cyy>studentsc.cyy) c=b; if (c!=a) temp=studentsa; studentsa=studentsc; studentsc=temp; if(k=3) /*平均成绩用插入法*/ for(d=1;d<n;d+) p=studentsd.pj; for(e=0;e<d;e+) if(studentse.pj<p) break; if(e=d) continue; for(f=d;f>e;f-) studentsf=studentsf-1; studentse=temp; input(students,n); /*显示排序后的所有记录*/ save(students ,n); printf("n 排序完成!n"); /*统计学生分数在各等级的人数子程序*/void Tongji(STU students,int n) int count6085=0,count85=0,count60=0; int i=0; system("cls"); printf(" n退出请输入:0 n"); input(students,n);i=0;while(i<n) if(studentsi.pj>85) count85+;i=i+1;continue; /*平均成绩=>85*/ if(studentsi.pj>=60&&studentsi.pj<=85) count6085+;i=i+1;continue; /*60<平均成绩<85*/ if(studentsi.pj<60) count60+;i=i+1;continue; /*平均成绩<60*/printf("n*统计结果*nn");printf("平均成绩高于分的人数:%d n",count85);printf(" n");printf("平均成绩在分和分之间的人数:%d n",count6085);printf(" n");printf("平均成绩低于分的人数:%d n",count60);printf(" n");printf("nn*统计结束*");getchar();/*导出或保存数据*/void save(STU students,int n) FILE* fp; int i=0; fp=fopen("students","wb+");/*以读写方式打开创建一个二进制文件*/ if(fp=NULL) /*打开文件失败*/ printf("n*打开文件错误!*n"); return ; for(i=0;i<n;i+) if(fwrite(&studentsi,sizeof(STU),1,fp)=1)/*每次写一条记录或一个结构数组元素至文件*/ continue; else break; if(i>0) getchar(); printf("nn*共导出%d个学生信息*n",i); getchar(); else system("cls"); printf("*没有信息导出*n"); getchar(); fclose(fp); /*关闭此文件*/*导入数据*/void Read(STU students,int * n) FILE* fp; int i=0; fp=fopen("students","rb");/*以只读方式打开一个已有的二进制文件*/ if(fp=NULL) /*打开文件失败*/ printf("n*打开文件错误!*n"); exit(0); for(i=0;i<N;i+) if(fread(&studentsi,sizeof(STU),1,fp)=1)/*每次读一条记录或一个结构数组元素至文件*/ continue; else break; *n=i; if(i>0) printf("nn*共导入:%d 个学生信息*n",i); getchar(); else system("cls"); printf("*没有信息导入!*n"); getchar(); getchar(); fclose(fp); /*关闭此文件*/*主函数*/void main() STU studentsN; int n; char s13,s23="1" int i,k; printf("nn"); printf("*n"); printf(" < 欢迎使用本软件> nn"); printf(" <版本: 修改版> nnn"); printf(" <姓名>:邢曾智 <班级>: 09511002 <学号>:0951100201n"); printf(" n"); printf("*n"); printf("nn"); for(i=0;i<3;i+) printf("n请输入密码:"); gets(s1); if(strcmp(s1,s2)=0) break; else printf("n>密码错误,请重新输入"); if(i>2) printf("n您已连续次输错,系统将退出!n"); exit(0); else while(1) k=displaymenu(); switch(k) case 1 : add(students,&n); break; case 2 : Read(students,&n);input(students,n) ;break; case 3 : Read(students,&n);Locate(students,n);break; case 4 : Read(students,&n);Modify(students,n);break; case 5 : Read(students,&n);sort(students,n);break; case 6 : Read(students,&n);Tongji(students,n); break; case 7 : save(students,n) ;break; case 8 : Read(students,&n);break; case 9 : system("cls"); printf("n *谢谢您的使用*n");exit(0);break; default : printf("nn输入错误,输入必须是9之间的一个数字!请重新输入n");getchar();getchar(); 3、运行结果(截图):第一步:输入本软件的使用密码。第二步:登陆后的画面第三步:输入学生成绩的画面第四步:输出学生成绩这个是随便输入后保存的有关数据第五步:查询成绩第六步:修改原来的信息第七步:成绩排序按英语排序第八步:成绩统计第九步:保存数据第十步:导出数据4、遇到困难:在进行此次实训的过程中我遇到了许多的问题,比如没有定义函数名就进行函数的编译,以至于等到运行时找了很久都没有找到错误,还有就是定义指针数组名的时候不清楚如何在结构体中添加指针数组以及如何在特定的地方添加函数。不懂如何用在被调用函数中直接改变多个被调函数值,以及如何用函数把变量传送到到指定的地址等等。实训心得:历时2星期的C语言程序实训已经结束了,在这2星期编程的过程中感触颇多,实训编程的同时暴露出了许多我自身存在的问题,同时也对自身有了很大的提高。首先,对我以前做题做事非常马虎的毛病有了很大的改进,通过在这2星期编程的过程中的锻炼,我现在做题比以前仔细多了,会小心翼翼地去看每一个地方,会仔细地检查程序的每一个字母、标点。其次,在些天编程的过程当中弥补了我许多知识上的缺陷,弄清楚了我不懂的地方和似是而非的地方,使我及时补上了欠缺。再次,通过2星期综合实训编程使我的知识形成了一个完整的框架结构,而不再是零散的知识个体,使我在使用时更加的方便。第四,在几天的实习结束后,我对做完的习题检查不再是走马观花,而是仔细核对、认真检查。第五,通过这些天的实习改变了我做题时心烦气燥的习惯,现在做题可以平和静气的完成。第六,通过这些天的实习我的自制能力更强了,基本完全可以控制自己,避免外界的干扰,安心地完成自己的工作。第七,通过这次实训也让我充分的认识到了自己,了解到了自己的能力还有很多的不足,也明白了以前的自以为是让自己失去了得到更多知识的机会,使我明白了只有在不断的学习当中才能懂得更多的知识,拥有更高的能力。