西安邮电学院C语言课程设计实习报告_第1页
西安邮电学院C语言课程设计实习报告_第2页
西安邮电学院C语言课程设计实习报告_第3页
西安邮电学院C语言课程设计实习报告_第4页
西安邮电学院C语言课程设计实习报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

西安邮电学院高级语言程序设计 报 告 书院系名称:电子工程学院学生姓名:黄覃专业名称:微电子班 级:0902学号:时间:2010年6月23日至2010年7月2日实验题目学生管理系统一、实验目的综合应用所学的计算机基础知识和所掌握的程序设计语言,自行设计并实现一个较为完整的小型管理信息系统的设计与开发。通过系统分析、系统设计、编程实现,写实验报告等环节,初步掌握软件系统的设计方法和步骤,锻炼大家灵活运用程序语言进行软件开发的初步能力,提高分析问题和解决问题的能力,提高程序设计水平。二、功能要求1.运用结构体等编辑一个简单的学生信息管理系统,使之能够完成学生基本信息的录入,修改,注销,并对成绩进行录入,修改,求和与排序。2.执行编译操作,并根据提示调试程序,排除所有的错误和警告,直到编译成功。3.执行运行操作,逐一对每个模块进行调试,直到全部程序运行成功。4.请指导老师进行检查,对程序进行相关解释与说明,回答老师所提出的相关问题。对程序不足之处进行改进。5.根据源程序及运行情况截取相应的图片,认真完成实验报告。需求分析1.信息录入与信息添加 包含基本信息与成绩信息两个部分。基本信息部分包括学生的学号,姓名以及性别,姓名与性别要求中文输入输出。成绩包括三科,C语言,数学和英语。本模块相当于信息添加模块。2.信息修改可以随意修改学生的学号,姓名,性别以及三科成绩。3.信息删除删除指定学生的所有信息。4.数据排序针对学生的成绩进行排序。5.数据统计 对录入的数据进行规定方式的统计。三、系统分析与设计该程序主要由7个模块组成,分别是信息录入(添加)模块,信息编辑模块,信息删除模块,成绩录入模块,成绩修改模块,信息浏览模块以及信息统计模块。整体上使用数组进行控制,同时也使用了函数与结构体等共同实现各个模块的功能,整个模块通过主函数系统紧密地联系在一起。用链表实现文件之间的连接,通过指针、文件实现信息的及时存储与读取。所用到的知识点如下图所示:所用到的知识系统的结构图如下图所示:学生信息管理系统结构图2、程序模块结构图主函数部分用dowhile循环与switch语句控制,共设置9个功能键。如图所示。主函数模块流程图原始信息显示 int search_id(void)用户所输入的i代表输入的学号,类型为整形,之后判断是否属于先前存储的数据,根据结果执行操作,给予不同的返回值,结束程序。如图所示。原始信息显示模块流程图基本信息录入模块 void student_new(void)基本信息录入模块流程图基本信息注销模块 void student_del(void)基本信息注销模块流程图基本信息编辑模块 void student_del(void)基本信息注销模块流程图统计模块 int count()统计模块流程图成绩录入模块 void score_input(void)为了更加符合实际,本模块与基本信息录入模块分开,因为在实际中,学生管理系统一定是先有学生注册,再有成绩,不可能一次完全录入。其次,每次录入一科成绩也考虑到了实际操作性。如果输入科目以外的序号,系统将自动调回主菜单。成绩录入模块流程图排序模块 void paixu(char nn) 本模块实现使用数字键操作可以对学号、单科成绩以及总分进行排序。其工作原理和普通选择排序有所不同,事先定义新的中间变量,将已经录入的信息和数据全部存储到一个新的数组中,排序时,从该数组中提取数据,进行各种方式的排序,最终再存入一个数组,打印结果时,从该数组中提取相关信息与数据。这样避免了整个结构体的空间浪费,防止全部空量输出。排序模块与浏览模块相连接。排序模块流程图浏览模块 void browser(void)此部分设置变量k,作为排序方式的选择。判断数组中的内容,调用排序模块,再输出所有学生的信息。图 浏览模块流程图文件读写模块 save_message(int n) &int read_message()在D盘下自动生成库文件,stud.txt,下一次打开程序时自动读入。四、详细设计及运行结果 信息浏览模块中的不同排序方式五、调试情况,设计技巧及体会1.自我评价在本次课程设计中,加强了对C语言的了解与思考的能力,面对程序中出现的种种问题,都能仔细认真排查,最终找到较为合适的解决方案。可以心平气和的面对繁杂的代码,脚踏实地的一步一步分析与构架,虚心接受同学与指导老师的建议与意见,不断进步。但是,毕竟没有高级语言课程设计的经验,所以进度缓慢,思考速度不佳,并且思维容易陷进死胡同,这些都有待提高。2. 程序分析本程序基于VC+6.0平台编写,运用函数、数组、循环等知识将整体融合在一起。在函数模块构建部分,运用判断语句简化整个程序,调用与嵌套大大减少了不必要的代码。采取基本信息与成绩信息分离的方式,更加符合实际。设置单科排序方法,可以显而易见地看出学生的特长科目,有助于教学工作。在界面方面,设置不同背景色,让用户不产生视觉疲劳。3. 改进方案在编写过程中,由于知识储备有限,程序体寻在许多缺陷与漏洞,期待改进。项 目不足与漏洞改进方法信息量输入与输出的信息种类较少增加专业与班级,增加两门课的成绩,输出平均分非法输入某些模块考虑不周全,遇到非法输入自动弹回增加提示信息信息录入一次只能添加一条信息,不太方便设置choice,用户可以选择一次添加的数目与是否继续统计统计项目过少设置新的数组,统计每门课程的优秀率与及格率,最高分与最低分以及分数段统计4. 实习心得通过为期两周的实习,感受颇多。我觉得,编写应用程序是一个由难到易,再到难的过程。起初,由于自己高级语言基础薄弱,实战经验少,根本没有想过除了可以编写“HELLO WORLD!”外,还可以写这些东西,所以觉得非常困难,在实习之前的两天,奔赴计算机书库,查找相关的书籍与资料,看了诸多现成的程序源代码,里面用到大量的指针以及数据结构,这些正是自己最薄弱的部分,导致很多东西都看不明白,可想而知,何况自己还要现编一个出来。所以感觉十分困难,或者叫不可思议。真正上机后,在老师和同学的指导下,在仔细翻看课本的情况下,开始摸索自己的程序。其实,C语言的核心就是算法,一个好的程序员,一定有最好的算法。那么,在设计算法与模块时,应该进行十分周密的考虑。之后的两天,我一直在考虑算法,画结构图,当大致框架出来后,还是挺高兴的,因为终于靠自己的思维搞出来这么一个看似不可能的玩意。实习期间,认真地编写与调试程序是关键部分,通过先前做的功课,觉得要实现要求的功能还是很容易的,课本中有很多模块时可以直接拿来用的,还有些照猫画虎就可以完成。就这样,我完成了自己的程序初稿。后期调试阶段,出现了许多很棘手的问题。譬如文件无法存储和读取,使用错误的跳转语句等。这些失误都是由于自己的粗心与偷懒导致的。在老师的大力帮助下,重新编写主函数部分,才解决了问题。 可是越是到后面越觉得自己的程序不够完美,比如在信息统计等方面,有些差强人意。再比如之前想利用graphics开发图形界面,发现VC不支持原版的函数库,需要安装兼容包。对程序的种种不如意,让我认为,写一个程序简单,但是写一个真正有可用性,稳定性,安全性,人性化的程序实属不易,需要不断学习,才可以完成。我觉得上机实习真的可以让人在高级语言方面取得较大的进步,纸上谈兵的方法在学习方面永远行不通,要实践,才能成功。编写一个程序,除了需要具备扎实的只是以外,还要有细心、专心的品质,这些都是成功的关键。六、源程序清单# include # include # include # include # define MAX 25int INDEX32;int n;struct STUDENT int id,Cprogram,math,english; char name21; char sex6;students32;int read_message()FILE *fp;int i=0;system(cls);if(fp=fopen(d:/stud.txt,rt)=NULL) printf(nn*无信息,按任意键返回菜单添加!*n); fflush(stdin); getch(); return 0; while(feof(fp)!=1) if(fread(&studentsi,sizeof(struct STUDENT),1,fp)=NULL) break; else i+; fclose(fp); return (i);void page_title() printf(nn*欢 迎 光 临 学 生 管 理 系 统*nn);void return_confirm(void) printf(n按任意键返回n); getch(); int student_new() int i=0; system(cls); printf(nn 录入学生信息 (最多%d个) n,MAX); printf(-n); do printf(n 第%d个学生,i+1); printf(n 学号:); flushall();scanf(%d,&studentsi.id); if(studentsi.id=0) break; printf(n 学生姓名:); flushall();scanf(%s,); printf(n 学生性别:); flushall();scanf(%s,&studentsi.sex); i+; while(iMAX); printf(n -%d个学生信息输入完毕!-n,i); printf(n 按任意键回主菜单!); getchar(); return i;int search_id(void) int i; system(cls); printf(请输入学生学号:); scanf(%d,&i); for(n=0;n32;n+) if(studentsn.id=i) printf(学号:%dn,studentsn.id); printf(姓名:%sn,); printf(性别:%sn,studentsn.sex); return n; printf(n输入错误或学号不存在.n); return -1; void student_del(void) if(n=search_id()!=-1) studentsn.id=0; printf(n!该学生已注销.n); return_confirm(); void student_edit(void) if(n=search_id()!=-1) printf(n请重新输入新信息:n学号:); scanf(%d,&studentsn.id); printf(姓名:); scanf(%s,&); printf(性别:); scanf(%s,&studentsn.sex); return_confirm(); void score_input(void) int s,t; system(cls); printf(n请用数字键选择科目n1-C语言 2-数学 3-英语n); scanf(%d,&s); for(n=0;n32;n+) if(studentsn.id!=0) printf(学号:%d 姓名:%s 成绩:,studentsn.id,); scanf(%d,&t); switch(s) case 1 : studentsn.Cprogram=t;break; case 2 : studentsn.math=t;break; case 3 : studentsn.english=t;break; return_confirm(); void score_edit(void) if(n=search_id()!=-1) printf(C语言:%d 数学:%d 英语:%dn,studentsn.Cprogram,studentsn.math,studentsn.english); printf(n请重新输入成绩:nC语言:); scanf(%d,&studentsn.Cprogram); printf(数学:); scanf(%d,&studentsn.math); printf(英语:); scanf(%d,&studentsn.english); return_confirm(); void paixu(char nn) int m,p,x,t32; system(cls); for(n=0;n32;n+) switch(nn) case 1 : tn=studentsn.id;break; case 2 : tn=studentsn.Cprogram;break; case 3 : tn=studentsn.math;break; case 4 : tn=studentsn.english;break; case 5 : tn=studentsn.Cprogram+studentsn.math+studentsn.english;break; default: printf(n无效选项!n); return_confirm(); for(n=0;n32;n+) x=0; p=-1; for(m=0;mx) x=tm; p=m; tp=-1; INDEXn=p; void browser() int x; char k; system(cls); paixu(1); while(1) printf(按数字键选择排序方式或按 0 返回n); printf(学号-1t姓名t性别tC语言-2t数学-3t英语-4t总分-5n); printf(_n); for(n=0;n32;n+) if(INDEXn!=-1) x=INDEXn; printf(%dt%st,studentsx.id,); printf(%st%dt,studentsx.sex,studentsx.Cprogram); printf(%dt%dt,studentsx.math,studentsx.english); printf(%dn,studentsx.Cprogram+studentsx.math+studentsx.english); k=getch(); if(k0) paixu(k); else if(k=0) break; else continue; void about_me(void) system(cls); printf( %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %cnn,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06); printf( %c %c %c %c %c 制 作:黄覃 %c %c %c %c %cnn,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06); printf( %c %c %c %c %c 班 级:0902 %c %c %c %c %cnn,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06); printf( %c %c %c %c %c 学 号:4 %c %c %c %c %cnn,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06); printf( %c %c %c %c %c 邮箱: %c %c %c %c %cnn,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06); printf( %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %cnn,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06); return_confirm();int count()int i,a,b;printf(n 请输入三门课总分分数段(用逗号隔开,前者小):);printf(n-n);scanf(%d,%d,&a,&b);for(i=0;in;i+)if(studentsi.Cprogram+studentsi.math+studentsi.english=a)printf(n在%d分-%d分的学生有:n,a,b);printf(学号-姓名-性别-C语言-数学-英语-总分n); printf(*n); printf(%4d %5s %5s %5d %5d %5d %5d,studentsi.id,,studentsi.sex,studentsi.Cprogram,studentsi.math,studentsi.english,studentsi.Cprogram+studentsi.math+studentsi.english); printf(n*n); flushall();getchar();save_message(int n)FILE *fp;int i;if(fp=fopen(d:stud.txt,wt)=N

温馨提示

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

评论

0/150

提交评论