C语言课程设计--学生成绩简单管理程序.doc_第1页
C语言课程设计--学生成绩简单管理程序.doc_第2页
C语言课程设计--学生成绩简单管理程序.doc_第3页
C语言课程设计--学生成绩简单管理程序.doc_第4页
C语言课程设计--学生成绩简单管理程序.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南京航空航天大学2010-2011(二)C程序设计课程设计报告课设题目: 学生成绩简单管理程序一 学生学号: 课设教师: 日 期: 2011.5.31 一程序主要功能:(写出程序完成的主要功能) 用结构体数组结构实现简单的学生成绩管理功能,要求具有数据输入、数据输出、数组排序、元素插入、元素删除、查询等功能。 各菜单功能:1. Input Records(输入若干条记录)从键盘一次输入一个学生的姓名和成绩(一条记录),依次存放到结构体数组中。掺入一条记录后,显示提示信息:确认是否输入下一条记录,如确认,继续输入,否则,退出输入功能。2. Display All Record(显示所有记录)按顺序显示表中所有记录,每屏显示十条记录。每显示十条记录,按键继续显示下一屏。 3. Sort(排序) 以姓名为序排列数组。 4. Insert a Record(插入一条记录)在以姓名为序排列的数组中插入一条记录,插入后数组仍有序。输出插入成功的信息。 5. Delete a Record(按姓名查找,删除一条记录) 输入待删除记录的姓名,显示提示信息,让用户再次确认是否要删除。确认后,将该姓名的记录删除。 6. Query(查找并显示一个记录) 输入姓名,查找该记录,并显示该同学的成绩。 7. Add Records from a Text File(从正文文件中添加数据到结构体数组中) 用户可事前建立一个正文文件data.txt,存放多个待加入的记录。提示输入正文文件的文件名,然后从该文件中一次性加入多条学生记录。文件data,txt格式如下: 2 Wang Xiao 95 LiuLin 87 8. Write to a Text file 将数组中的全部记录写入文件records.txt,要求文件格式和文件data.txt相同。 9. Quit(退出学生成绩管理程序)二说明:(写出对题目的分析,设计中遇到的主要问题及解决方法,对设计的感想和心得。如有新增加的功能,给出增加功能的设计说明)1.题目分析 该题主要考察对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。 菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明: 功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。 功能2是显示所有的记录,通过循环输出,格式也比较重要。 功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。 功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。 功能6的算法在5中就已经体现了,输入姓名,一一比较。 功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。 功能8和9是对文件的操作,提前准备好数据。 2. 在写程序中遇到的问题:开始时无法正确完成“确认后再继续”我先是自己认真耐心地用很多方法调试修改,然后问了几个同学,解决了这个问题,还有有关文件读写的问题,因为是上课时没有听太明白,所以自己再次仔细看了一遍书,分析书中例题,然后再运用到该程序的编写中,在同学的帮助下解决了。面对遇到的其他很多或大或小的问题主要都是和同学交流探讨与问老师相结合的方式来达到彻底的解决的。3. 心得体会:编这样一个程序在之前看的时候总是觉得不可能做到,完全没有思路,不过当静下心坐在电脑前仔细看完要求和提示后,一步一步地编写,慢慢地发现其实只要肯想肯问就能积少成多,完成这样一个在我们之前看来很复杂的程序设计。两百多行的程序内容很多,有的地方也很复杂,尤其是一些细节问题,粗心地丢三落四,造成很多不必要的错误并且很难发现,因此的确是对我毅力的一种考验。完成之后程序运行到第一次输入数据总是会停止,不得不对300多行的程序进行单步调试,再次解决了之前没有发现的问题之后,发现编程需要非常严谨的态度和足够的耐心,否则就会因为一些问题而卡住甚至放弃。当然在整个过程中,同学帮助解决了许多自己没有意识到得错误,换一个角度,才能发现问题吧。三源程序#include /*调用库函数*/#include #include #include #define NULL 0typedef struct /*定义结构体数组*/ char name20; /*姓名*/ float score; /*成绩*/ Student;int menu_select(); /*个函数的类型声明*/int Input(Student stud,int n);void Display(Student stud,int n);void Sort_by_Name(Student stud,int n);int Insert(Student stud,int n,Student *s);int Insert_a_record(Student stud,int n);int Delete(Student stud,int n,char *name);int Delete_a_record(Student stud,int n);int Query(Student stud,int n,char *name);void Query_a_record(Student stud,int n);int AddfromText(Student stud,int n,char*filename);void WritetoText(Student stud,int n,char*filename);void Quit();void Display_Main_Menu();Student s,t; /*定义结构体变量*/Student stud40;/*定义结构体数组变量*/ void main() /*主函数*/int n=0; /*定义文件的记录数变量*/char filename20; for(;) switch(menu_select() /*判断使用者需要使用的程序*/ case 1 : /*执行1所代表的函数功能*/ printf(tInput Records:n); n=Input(stud,n); system(pause); break; case 2 : printf(tDisplay All Record :n); Display(stud,n); system(pause); break; case 3 : printf(tSort:n); Sort_by_Name(stud,n); system(pause); break; case 4 : printf(tInsert a Record:n); n=Insert_a_record(stud,n); system(pause); break; case 5 : printf(tDelete a Record:n); n=Delete_a_record(stud,n); system(pause); break; case 6 : printf(tQuery:n); Query_a_record(stud,n); system(pause); break; case 7: printf(tAdd Records from a Text File:n); n=AddfromText(stud,n,filename); system(pause); break; case 8 : printf(tWrite to a Text File:n); WritetoText(stud,n,filename); system(pause); break; case 0 : printf(tQuit:); system(pause); exit(0); /*退出程序*/ menu_select();/*返回菜单函数*/ int menu_select() /*菜单函数*/ char c; do system(cls); /*运行前清屏*/ printf(ntt * Welcome to use this program ! *nnn); printf(ttt1.Input Recordsn); printf(ttt2.Display All Recordn); printf(ttt3.Sortn); printf(ttt4.Insert a Recordn); printf(ttt5.Delete a Recordn); printf(ttt6.Queryn); printf(ttt7.Add Records from a Text Filen); printf(ttt8.Write to a Text Filen); printf(ttt0.Quitn); printf(*n); printf(Please Input Your Choice 0-8:); c=getchar(); /*读入选择*/ while(c8); return(c-0);/*返回选择*/ int Input(Student stud,int n) /*输入若干条记录*/ int i=0, p=1; char e; while(p!=0) printf(tplease input a name :); scanf(%s,); /*输入学生姓名*/ getchar(); printf(tplease input the score:); scanf(%f,&studi.score); /*输入学生成绩*/ getchar(); i+; printf(Do you want to continue to input :(Y/N)?); scanf(%c,&e); if (e=n|e=N) p=0; n=i; return(n); void Display(Student stud,int n)/*显示所有记录*/ int i=0; printf(tNametScoren); while(in) /*循环输出学生的成绩和学号*/ printf(t%st%fn,,studi.score); if(i+1)%10=0) /*判断是否十行暂停一下*/ system(pause); i+; void Sort_by_Name(Student stud,int n) /*将所有数据按姓名排序*/ int i,j; for (i=0;in-1;i+) /*选择法排序*/ for(j=i;j0) t=studi; studi=studj; studj=t; printf(Succeed!); int Insert (Student stud,int n,Student *s) /*插入给定记录*/ studn=*s; n+; Sort_by_Name(stud,n); /*调用排序函数*/ printf(successfully insert!); /*返回成功信息*/ return(n); int Insert_a_record(Student stud,int n ) /*插入一条记录*/ Student *p = (Student*)malloc(sizeof(Student); printf(tplease input a name :); scanf(%s,&p-name); printf(tplease input the score:); scanf(%f,&p-score); n=Insert(stud,n,p); /*调用插入函数*/ return(n); int Delete(Student stud,int n,char *name) /*删除给定姓名的记录*/ int i,k; for (i=0;in;i+) /*循环删除操作*/ if(strcmp(,name)= 0) for(k=i;kn;k+) studk.score=studk+1.score; strcpy(,studk+1.name); n-; printf(Delete successfully!);/*返回成功信息*/ return(n); printf(This record doesnt exsit!);/*返回失败信息*/ return (n); int Delete_a_record(Student stud,int n) /*按姓名查找,删除一条记录*/ char c,k20,*p; p=k; printf(tplease input a name:); scanf(%s,k); getchar(); /*读入姓名*/ printf(Make sure that you really want to delete it :(Y/N)?);/*询问是否继续操作*/ c=getchar(); if (c=y|c=Y) n=Delete(stud,n,p);/*调用删除函数*/ return(n); int Query(Student stud,int n,char *name) /*查找给定姓名的记录信息*/ int i; for (i=0;in;i+) if(strcmp(,name)=0) /*比较是否存在给定信息*/ printf(Query successfully!);/*返回成功信息*/ return(i); return( -1);void Query_a_record(Student stud,int n) /*查找记录*/ char p20; int a; printf(tplease input a name:); scanf(%s,p); /*读入姓名*/ a=Query(stud,n,p);/*调用查找函数*/ if (a=(-1) printf(This record doesnt exsit!);/*返回失败信息*/ printf(nt%st%f,,studa.score);/*输出查找到的学生记录*/ int AddfromText(Student stud,int n,char*filename) /*从外界文件中读入记录*/ int i=0,m; FILE *fp; printf(ttInput the filename:); scanf(tt%s,filename); if(fp=fopen(filename,r)=NULL) /*打开文件并判断文件是否存在*/ printf(tttcannt open the filen); printf(ttt); system(pause); return(n); /*返回记录数*/ elsefscanf(fp,%d,&m); /*读入文件中记录的条数*/while(im) fscanf(fp,%s%f,studn+,&studn+i.score); /*将文件中的记录写入程序*/i+; n+=m; fclose(fp); printf(tttSuccessed!n); printf(ttt); system(pause); return(n); /*返回记录数*/void WritetoText(Student stud,int n,char*filename) /*将程序中的记录写入文件*/ int i=0; FILE *fp; printf(tttWrite Records to a Text Filen); printf(tttInput the filename:); scanf(ttt%s,filename); if(fp=fopen(filename,w)=NULL) printf(tttcannt open the filen); system(pa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论