c语言课程设计报告---学生成绩简单管理程序。
一、系统菜单的主要功能。
1)输入若干条记录。
2)显示所有记录。
3)按学号排序。
4)插入一条记录。
5)按姓名查找,删除一条记录。
6)查找并显示一条记录。
7)输出统计信息 (新增)
8)从正文中添加数据到结构体数组中。
9)将所有数据写入文件中。
0)退出程序。
二、题目分析。
该题主要考察学生对结构体,指针,文件的操作,以及c语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。
菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有c语言学过的技巧,下面就各个子程序中的功能进行说明:
功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。
功能2是显示所有的记录,通过循环输出,格式也比较重要。
功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。
功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。
功能6的算法在5中就已经体现了,输入姓名,一一比较。
功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。
功能8和9是对文件的操作,提前准备好数据。
三、程序正文部分。
#include<> 引用库函数*/
#include<>
#include<>
#include<>
typedef struct /*定义结构体数组*/
char num[10]; 学号*/
char name[20]; 姓名*/
int score; /成绩*/
student;
student stu[80]; 结构体数组变量*/
int menu_select() 菜单函数*/
char c;
do{system("cls");运行前清屏*/
printf("\t\t***students' grade management system***n");菜单选择*/
printf("\t\t | 1. input records |");
printf("\t\t | 2. display all records |");
printf("\t\t | 3. sort |");
printf("\t\t | 4. insert a record |");
printf("\t\t | 5. delete a record |");
printf("\t\t | 6. query |");
printf("\t\t | 7. statistic |");
printf("\t\t | 8. add records from a text file|");
printf("\t\t | 9. write to a text file |");
printf("\t\t | 0. quit |");
printf("\t\tn");
printf("\t\t\tgive your choice(0-9):"
c=getchar();读入选择*/
while(c<'0'||c>'9');
return(c-'0');返回选择*/
int input(student stud,int n) /输入若干条记录*/
int i=0;
char sign,x[10]; x[10]为清除多余的数据所用*/
while(sign!='n'&&sign!='n') 判断*/
printf("\t\t\tstudent's num:")交互输入*/
scanf("\t\t\t%s",stud[n+i].num);
printf("\t\t\tstudent's name:")
scanf("\t\t\t%s",stud[n+i].name);
printf("\t\t\tstudent's score:")
scanf("\t\t\t%d",&stud[n+i].score);
gets(x); 清除多余的输入*/
printf("\t\t\tany more records?(y/n)")
scanf("\t\t\t%c",&sign); 输入判断*/
i++;return(n+i);
void display(student stud,int n) /显示所有记录*/
int i;
printf("\t\t\tn");格式头*/
printf("\t\t\tnumber name score");
printf("\t\t\tn");
for(i=1;i1&&i%10==0) /每十个暂停*/
printf("\t\t\tn");格式*/
printf("\t\t\t");
system("pause");
printf("\t\t\tn");
printf("\t\t\t");
system("pause");
void sort_by_num(student stud,int n) /按学号排序*/
int i,j,*p,*q,s;
char t[10];
for(i=0;i0)
strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&stud[j+1].score;
q=&stud[j].score;
s=*p;p=*q;
q=s;int insert_a_record(student stud,int n) /插入一条记录*/
char x[10]; 清除多余输入所用*/
printf("\t\t\tstudent's num:")交互式输入*/
scanf("\t\t\t%s",stud[n].num);
printf("\t\t\tstudent's name:")
scanf("\t\t\t%s",stud[n].name);
printf("\t\t\tstudent's score:")
scanf("\t\t\t%d",&stud[n].score);
gets(x);
n++;sort_by_num(stud,n); 调用排序函数*/
printf("\t\t\tinsert successed!");返回成功信息*/
return(n);
int delete_a_record(student stud,int n) /按姓名查找,删除一条记录*/
char s[20];
int i=0,j;
printf("\t\t\ttell me his(her) name:")交互式问寻*/
scanf("%s",s);
while(strcmp(stud[i].name,s)!=0&&istud[i].score) j=i;
if(stud[k].score **er=1.0*sum/n; printf("\t\t\tthere are %d records.",n); 总共记录数*/ printf("\t\t\tthe hignest score:");最高分*/ printf("\t\t\tnumber:%s name:%s score:%d",stud[j].num,stud[j].name,stud[j].score); printf("\t\t\tthe lowest score:");最低分*/ printf("\t\t\tnumber:%s name:%s score:%d",stud[k].num,stud[k].name,stud[k].score); printf("\t\t\tthe **erage score is %5.2f",**er); 平均分*/ int addfromtext(student stud,int n) /从文件中读入数据*/ int i=0,num; file *fp; /定义文件指针*/ char filename[20]; 定义文件名*/ printf("\t\t\tinput the filename:") scanf("\t\t\t%s",filename); 输入文件名*/ if((fp=fopen(filename,"rb"))null) /打开文件*/ printf("\t\t\tcann't open the file");打开失败信息*/ printf("\t\t\t"); system("pause"); return(n); fscanf(fp,"%d",&num); 读入总记录量*/ while(i fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score); i++;n+=num; fclose(fp); 关闭文件*/ printf("\t\t\tsuccessed!"); printf("\t\t\t"); system("pause"); return(n); void writetotext(student stud,int n) /将所有记录写入文件*/ int i=0; file *fp; /定义文件指针*/ char filename[20]; 定义文件名*/ printf("\t\t\twrite records to a text file");输入文件名*/ printf("\t\t\tinput the filename:") scanf("\t\t\t%s",filename); if((fp=fopen(filename,"w"))null) /打开文件*/ printf("\t\t\tcann't open the file"); system("pause"); return; fprintf(fp,"%d",n); 循环写入数据*/ while(i fprintf(fp,"%16s%-15s%d",stud[i].num,stud[i].name,stud[i].score); i++;fclose(fp); 关闭文件*/ printf("successed!");返回成功信息*/ void main() 主函数*/ int n=0; for(;; switch(menu_select())选择判断*/ case 1: printf("\t\t\tinput records");输入若干条记录*/ n=input(stu,n); break; case 2: printf("\t\t\tdisplay all records");显示所有记录*/ display(stu,n); break; case 3: printf("\t\t\tsort"); sort_by_num(stu,n); 按学号排序*/ printf("\t\t\tsort suceessed!"); printf("\t\t\t"); system("pause"); break; case 4: printf("\t\t\tinsert a record"); n=insert_a_record(stu,n); 插入一条记录*/ printf("\t\t\t"); system("pause"); break; case 5: printf("\t\t\tdelete a record"); n=delete_a_record(stu,n); 按姓名查找,删除一条记录*/ printf("\t\t\t"); system("pause"); break; case 6: printf("\t\t\tquery"); query_a_record(stu,n); 查找并显示一个记录*/ printf("\t\t\t"); system("pause"); break; case 7: printf("\t\t\tstatistic"); statistic(stu,n); 新增功能,输出统计信息*/ printf("\t\t\t"); system("pause"); break; case 8: printf("\t\t\tadd records from a text file"); n=addfromtext(stu,n); 新增功能,输出统计信息*/ break; case 9: printf("\t\t\twrite to a text file"); writetotext(stu,n); 循环写入数据*/ printf("\t\t\t"); system("pause"); break; case 0: printf("\t\t\th**e a good luck,bye-bye!");结束程序*/ printf("\t\t\t"); system("pause"); exit(0); 四、函数调用关系图。 注:“→代表调用。 input函数。 打印链表记录。 display函数。 输入若干条记录。 menu_select()函数。 选择菜单。sort_by_num函数。 显示所有记录。 delete_a_record函数。 按姓名查找,删除一条记录。 query_a_record查找并显示一条记录。 statistic函数。 输出统计信息 (新增) addfromtext函数。 从正文中添加数据到结构体数组中。 main函数。 insert_a_record插入一条记录。 writetotext函数将所有数据写入文件中。 退出程序。reverse(head)函数。 按学号排序。 五、设计测试流程。 1、进入界面。 2、输入选项1,回车; 按提示输入数据: 3、回到主菜单; 输入选项7,回车; 输入文件名:回车; 出现成功提示,则读入文件操作成功。 4、回到主菜单,输入2,回车。 每10个暂停显示数据。 5、回到主菜单,输入3,回车。 出现排序成功信息。 6、回到主菜单,输入4,回车。 按提示插入一组数据。 7、回到主菜单,输入5,回车。 按提示输入姓名,删除数据。 出现删除成功的信息。 8、回到主菜单,输入6,回车。 输入姓名进行查询。 9、回到主菜单,输入7,回车。 出现统计信息。 10、回到主菜单,输入9,回车。 输入回车。出现成功写入文件的信息。 11、回到主菜单,输入0,回车退出系统 周口师范学院。课程设计报告。院 系 计算机科学与技术学院 班级。学生姓名学号。设计题目 职工工资管理系统。完成日期 年月日 课程设计任务书。设计题目 工资管理系统 教研室主任指导教师 年月日。摘要11设计内容 任务及具体要求2 1.1设计内容2 1.2设计任务及具体要求2 2概要设计3 2.1该系统... 华中科技大学计算机科学与技术学院。题目 专业 班级 学号 姓名 成绩 指导教师 完成日期 2016年月日。目录。一 系统需求分析 1 二 总体设计 2 三 数据结构设计 3 四 详细设计 4 五 系统实现 5 六 运行测试与结果分析 6 七 总结 7 八 参考文献 8 九 指导教师评语 9 对所要解... c语言。课程设计。商业销售管理系统。学号 121407210 姓名 宋军。班级 软件1202 指导老师 邹姝稚。成绩 2013年6月。一 任务描述。编写一个商品销售管理系统,是其能够拥有商品买卖和库存管理功能。在顾客选购时,需给出输入商品名称,或商品型号,或选择列表进而输入商品编号三种选择,在顾客选...c语言课程设计报告 课程设计报告
C语言课程设计报告
C语言课程设计报告