ImageVerifierCode 换一换
格式:DOCX , 页数:54 ,大小:792.01KB ,
资源ID:6791598      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6791598.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言程序设计实习报告 行编辑器 学生管理系统.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言程序设计实习报告 行编辑器 学生管理系统.docx

1、C语言程序设计实习报告 行编辑器 学生管理系统C程序设计实习报告题目:简单的行编辑器(修改版) 学 院: 专 业: 姓 名:班级学号:指导教师: 2009年 7 月 3 日前言由于我们班选题是题号和学号一一对应,所以我抽到了16题,简单的行编辑器。刚开始时不知道什么叫行编辑器,以为这个题目有多么的神秘,第二次实习时老师说选这个题目最好换个题,与老师交流,老师建议在原有的题目上加些功能。只是还是不知道什么叫行编辑器,上网,问同学,没有一点思路。再一次问老师,老师说不用管它什么是行编辑器,编辑的目的是为了后面对文件进行处理,于是这一次总算有了新的思路。等到这个题快要做完时,也明白了为什么老师说它太

2、简单了,做完后自己感觉都有串改题目之嫌疑,原题的要求实在太简单了,自己加的功能占了程序的大部分。8天下来感觉自己对C语言以及程序编辑的认识加深了许多。以前觉得很难的结构体,数组,文件全部用到了,虽然并不能完全掌握,那也有一些成就感。在这里要感谢老师以及我的同学,在整个编程中给了我很大的帮助。1题目要求原题:简单的行编辑器【要求】(1) 设置一个简单的行编辑器,每行以回车结束。(2) 数据以文件形式储存。(3) 编辑器具有查找、替换、修改数据的功能。修改后:修改思路是将由行编辑器生成的文件换成有关结构体的内容,建立一个结构体输入关信息,生成文件,再实现查找、替换、修改数据等的功能。这里具体是参考

3、书上学生成绩管理系统,实现成绩的录入,显示,查找,添加,保存等功能模块。2需求分析根据题目要求,由于学生信息是存放在文件中,所以应提供文件的输入、输出等操作;在程序中需要浏览学生的信息,应提供显示、查找、排序等操作;另外还应提供键盘式选择菜单实现功能选择。3概要设计3.1设计思想由于原题的特点,对题目进行了一定的拓展。本着提高自己编程能力,加深对C语言重点、难点内容的理解,添加了关于结构体、数组以及文件的运用。将程序模块化,使程序条理清楚,制作简单,容易读懂,并能体会到程序开发的思想与方法,加深对C语言编程的认识。3.2软件运行与开发平台C语言,Windows平台,VC6.0,3.3数据结构此

4、处选用了结构体的形式来存放每一个学生的信息,对与若干个学生采用了结构体数组。3.4系统结构图4详细设计4.1主函数主函数比较简单,只提供了输入和菜单函数的调用。各个功能的模块用菜单方式选择。【程序】void main()int q,w1; printf(tt*行编辑器(修改拓展版)*nn); printf(ttttt072092t周磊t20091002238nn); do printf(tt重新录入数据请按1tt进入菜单请按2: bb); scanf(%d,&q); if(q!=1&q!=2) /*对选择数字作出判断*/ w1=1; getchar(); else w1=0;while(w1=

5、1); if(q=1) /*if语句选择要进行的操作*/ enter(); else menu();4.2各功能模块设计(1)输入模块考虑到自己在C学习时遇到的问题,以及在考计算机二级时薄弱的地方,以及联系这个题目的要求,此处选用了结构体的形式来存放每一个学生的信息,对与若干个学生采用了结构体数组。具体到各个数据的信息,学号和姓名采用了字符型数组,分数为整型,而平均分采用了实型。/*定义结构体变量*/struct student char num20;/*学号*/ char name100;/*姓名*/ int score3;/*分数*/ float ave;/*平均分*/stuN; /*st

6、uN中每个元素对应一个学生*/N采用了宏定义的方式,可以随时在源程序中修改。【程序】/*输入模块*/void enter() int i,n; printf(请输入学生数量(0-%d)?:,N-1); scanf(%d,&n); printf(n请输入数据nn); for(i=0;in;i+) printf(n 输入第%d个学生记录n,i+1); input(i); /*调用输入函数*/ if(i!=0) save(); /*调用保存函数*/(2)浏览模块该模块的功能是显示所有学生的记录信息,流程如图。图4.22【程序】/*浏览函数*/void browse()/*浏览模块,前面多次用到*/

7、int i,n; n=load(); printf_face(); for(i=0;in;i+) if(i!=0)&(i%10=0) /*目的是分屏显示*/ printf(任意键继续n); getch(); puts(nn); printf_one(i); printf(nt共有%d条记录.n,n); printf(n任意键返回nn); getch(); menu();(3)添加模块该模块的功能是用户需要增加新的学生记录,注意新添加的内容不能覆盖原来的记录。追加模块流程图:【程序】/*添加模块*/void add() int i,n,m,k; FILE *fp; n=load(); print

8、f(请输入添加的学生个数(0-%d)?:,N-1-n); scanf(%d,&m); /*m为添加学生的个数*/ k=m+n-1; for(i=n;i=k;i+) printf(n 输入第%d个学生记录n,i-n+1); input(i); /*调用输入函数*/ if(fp=fopen(zhoulei.txt,ab)=NULL) printf(n文件无法打开n); for(i=n;i=k;i+) if(fwrite(&stui,sizeof(struct student),1,fp)=0) printf(文件写入错误n); fclose(fp); save();(4)查找模块该模块在参考程序上

9、做的一定逻辑上的修改,可以按姓名和按学号进行查找,找到以后,可进行修改和删除信息的操作。由于改动方便,这里的按姓名和按学号查找分了两个函数,使函数比较烦缀,故函数还可以进行优化。【程序】a)查找模块 /*查找函数*/void search() int z,w1; do printf(请输入查找方式:1).按姓名查找 2).按学号查找 bb); scanf(%d,&z); if(z!=1&z!=2) /*对选择数字作出判断*/ w1=1; getchar(); else w1=0;while(w1=1); if(z=1) search_name(); /*调用按姓名查找程序*/ else sea

10、rch_no(); /*调用按学号查找程序*/b) 按姓名查找模块这个是根据姓名查找到对应的学生记录,但在此处程序有一定的缺陷,就是如果有相同的姓名,只能查到最上面的一个,而其他的则不能找到。后来尝试修改时发现,还需要改动其他相应的函数,故没有进行下去。【程序】/*按姓名查找*/void search_name() int i,n,k,w1=1,w2,w3,w4; struct student s; n=load(); do do k=-1; printf(nn请输入要查找的姓名! 姓名:); scanf(%s,s.name); /*输入要修改的数据的姓名*/ printf_face(); /

11、*调用显示数据结构项目的函数*/ for(i=0;in;i+) if(strcmp(s.name,stui.name)=0) /*匹配姓名*/ k=i; /*找到要修改的记录*/ printf_one(k);break; /*调用显示一个记录的函数*/ if(k=-1) printf(nn记录不存在!); printf(nn是否继续?nt1).是 2).否 返回 bb); scanf(%d,&w1); if(w1=1) search(); else menu(); while(k=-1&w1=1); w4=0;w3=0; if(k!=-1) printf(nn请选择下一步:nt1).查找其他

12、2).修改 3).删除 4).返回菜单 bb); scanf(%d,&w2); switch(w2) case 2:w3=modify_data(k,n);break; case 3: printf(n确定删除?nt1).确定 2).返回 bb); scanf(%d,&w4); if(w4=1) stuk.ave=0; break; if(w3=1|w4=1) save(); printf(nn操作成功_); printf(nn请选择下一步:nt1).查找其他 2).返回 bb); scanf(%d,&w2); while(w2=1);menu();c) 按学号查找模块这个函数是在按姓名查找模

13、块的基础上做了相应的改动,由于学号具有唯一性,故不存在查不到相同学号的情况。【程序】/*按学号查找程序*/void search_no() int i,n,k,w1=1,w2,w3,w4; struct student s; n=load(); do do k=-1; printf(/n/n请输入要查找的学号! 学号:); scanf(%s,s.num); printf_face(); for(i=0;in;i+) if(strcmp(s.num,stui.num)=0) k=i; printf_one(k);break; if(k=-1) printf(nn记录不存在!); printf(n

14、n是否继续?nt1).是 2).否 返回 bb); scanf(%d,&w1); if(w1=1) search(); else menu(); while(k=-1&w1=1); w4=0;w3=0; if(k!=-1) printf(nn请选择下一步:nt1).查找下一个 2).修改 3).删除 4).返回菜单 bb); scanf(%d,&w2); switch(w2) case 2:w3=modify_data(k,n);break; case 3: printf(n确定删除?nt1).确定 2).返回 bb); scanf(%d,&w4); if(w4=1) stuk.ave=0;

15、break; if(w3=1|w4=1) save(); printf(nn操作成功_); printf(nn请选择下一步:nt1).查找其他 2).返回 bb); scanf(%d,&w2); while(w2=1);menu();/*浏览函数*/void browse()/*浏览模块,前面多次用到*/ int i,n; n=load(); printf_face(); for(i=0;in;i+) if(i!=0)&(i%10=0) /*目的是分屏显示*/ printf(任意键继续n); getch(); puts(nn); printf_one(i); printf(nt共有%d条记录.

16、n,n); printf(n任意键返回nn); getch(); menu();(5)修改模块该模块首先要显示所有学生的信息,并采用分屏显示。显示完所有记录后,用户输入要修改的学生的学号,根据学号查找学生记录,并提示用户修改该记录的哪部分信息。【程序】/*修改函数*/void modify() struct student s; int i,n,k,w0=1,w1,w2=0; n=load(); do k=-1; printf_face(); /*调用显示数据结构项目函数*/ for(i=0;in;i+) if(i!=0)&(i%10=0) /*目的是分屏显示*/ printf(nn记住你要修

17、改的学号.任意键继续 .); getch(); puts(nn); printf_one(i); /*调用显示一个记录的函数*/ do printf(nn请输入你想要修改的学号:); scanf(%s,s.num); /*输入要修改的数据的学号*/ for(i=0;in;i+) if(strcmp(s.num,stui.num)=0) k=i; /*找到要修改的记录*/ s=stui; /*备份当次要修改的学生记录stui*/ if(k=-1) printf(nn记录不存在!); /*当k=-1表示没有找到*/ while(k=-1); printf_face(); printf_one(k)

18、; w1=modify_data(k,n); /*修改学生记录并返回保存控制值*/ if(w1=1) printf(n操作成功_.nn是否继续修改?nnt1).是2).返回并保存t bb); scanf(%d,&w0); w2=1; /*用来控制保存,使w2=1是标记已有过的修改*/ else w0=0; if(w2=1) stuk=s; if(w0!=1&w2=1) save();/*w2不等于1表示在此次之前没有修改过,这是就保存用户已确认的修改并返回*/ while(w0=1); printf(nn你所修改的内容不存在); menu();(6)排序模块该模块在原有的排序模块上做了一定的修

19、改,可以按照分数1,、分数2、分数3以及平均数进行由大到小的排序。这里选择了冒泡法排序。由于改动方便,这里的4种排序方法在程序上其实是大同小异,因此程序还需进行一定的优化。还有一个问题就是排序结束后不能直接浏览,需要手动调用浏览模块。其原因是在排序后调用了保存函数,而保存函数保存完毕要直接返回主菜单。如果先进行浏览的话,所显示内容不是排序后的。【程序】a) 排序模块 /*排序模块*/void order() int m; printf(请选择排序方式:1).按分数1排序 2).按分数2排序 3).按分数3排序 4).按平均分排序nn); scanf(%d,&m); switch(m) case

20、 1:order_score1();break;/*分数1*/ case 2:order_score2();break;/*分数2*/ case 3:order_score3();break;/*分数3*/ case 4:order_ave();break; /*平均分*/ b) 按四种方式排序/*按平均分排序*/void order_ave() int i,j,n; struct student s; n=load(); for(i=0;in-1;i+) /*冒泡法排序*/ for(j=i+1;jn;j+) if (stui.avestuj.ave ) s=stui; stui =stuj;

21、 stuj =s; save(); puts(nn); menu();/*按分数1排序*/void order_score1() int i,j,n; struct student s; n=load(); for(i=0;in-1;i+) /*冒泡法排序*/ for(j=i+1;jn;j+) if (stui.score0stuj.score0 ) s=stui; stui =stuj; stuj =s; save(); puts(nn); menu();/*按分数2排序*/void order_score2() int i,j,n; struct student s; n=load();

22、for(i=0;in-1;i+) /*冒泡法排序*/ for(j=i+1;jn;j+) if (stui.score1stuj.score1 ) s=stui; stui =stuj; stuj =s; save(); puts(nn); menu();/*按分数3排序*/void order_score3() int i,j,n; struct student s; n=load(); for(i=0;in-1;i+) /*冒泡法排序*/ for(j=i+1;jn;j+) if (stui.score2stuj.score2 ) s=stui; stui =stuj; stuj =s; sa

23、ve(); puts(nn); menu();(7)保存模块这个模块单独放在菜单里其实有点缀余,因为每个对文件进行写入或修改的操作都单独进行了保存。这里文件的读写全用的是二进制,所以保存的文件直接以文本打开后会出现乱码。【程序】/*保存函数*/void save()/*存储函数*/ int i; FILE *fp; if(fp=fopen(zhoulei.txt,w)=NULL) /*按只写方式打开文件*/ printf(文件无法打开n);/*防止文件为空,并报错*/ for(i=0;iN;i+) if(stui.ave!=0)/*stui.ave!=0表示此记录已删除*/ if(fwrite

24、(&stui,sizeof(struct student),1,fp)!=1) /*这里用二进制进行文件的读写,是文件不能通过电脑直接打开*/ printf(文件写入错误n); fclose(fp); printf(nn保存成功!nn按任意键继续nn); getch(); menu(); /*一般的保存模块,用于各种变动之后,文件的保存*/4.3公共函数这里都是些在每个模块都可能用到的公共函数(1)加载函数/*加载函数*/int load() FILE *fp; int i; if(fp=fopen(zhoulei.txt,rb)=NULL) /*以只读方式打开一个二进制文件*/ printf

25、(n无法打开文件n); return NULL; for(i=0;!feof(fp);i+) fread(&stui,sizeof(struct student),1,fp); fclose(fp); return(i-1); /*返回记录个数*/(2) 学号输入函数/*学号输入函数*/void no_input(int i,int n) /*i表示第i个学生的信息,n表示比较到第n个学生*/ int j,k,w1; do w1=0; printf(学号:); scanf(%s,stui.num); for(j=0;stui.numj!=0;j+) /*学号输入函数,作了严格的规定*/ if(stui.numj9) /*判断学号是否为数字*/ put

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1