




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 语言的课程设计报告 C 语言的设计目标是提供一种能以简易的方式编译、处 理低级存储器、产生少量的机器码以及不需要任何运行环 境支持便能运行的编程语言。下面是小编想跟大家分享的 C 语言的课程设计报告,欢迎大家浏览。 通过亲自设计程序,可以令我们熟悉 c 语言操作,更 熟练的掌握 c 语句。初步体会编程的过程,为将来的程序 深入学习打下基础和培养兴趣。 21 题目简介 可以向文件中写入、删除、添加职工信息,也可以从 文件中导出来浏览 22 设计要求 职工信息包括职工号、姓名、性别、年龄、学历、工 资、住址、电话等。试设计职工信息管理系统,使之能提 供以下功能: 系统以菜单方式工作。 职工信息录入功能(职工信息用文件保存)输入 职工信息浏览功能 输出 查询和排序功能:(至少一种查询方式) 算法 按职工号查询 按学历查询等 职工信息删除、添加功能 32 详细设计: 、主函数:main() 显示系统工作菜单,罗列该系统所有功能。先声明所 有将会调用到的函数名。再运用选择函数 switch 即可根据 使用者所输入的功能代号进入对应的功能程序。亮点:定 义一个全局指针变量*p 和全局变量。其中表示当前系 统中职工人数,指向的地址,追踪人数变化,这样在 添加或者删除导致人数变化后,浏览函数 display()能够正 确显示出当前人数的职工信息。宏定义 define N 指定首 次输入的职工人数,可根据不同需要随时更改。 、保存函数:void save 定义文件指针,用“只写“打开指定在 盘的“d:/”文本文件。首先用语句判断文件是否 打开成功,若返回值不为,则可继续下面操 作。用循环通过语句将结构数组 中的内容写入保存在盘的文本文件里面。形参 m 指 需要写入文件的职工人数。最后关闭文件。 4、导出函数:void load(int b) 首先判断 fopen“只读“打开“d:/”是否成功,若其返 回值不为零,继续下面操作。用 for 循环通过 fscanf 语句 将文件中的职工信息取出放到 em 结构数组里面。形参 b 指 需要导出的职工人数。最后关闭文件。 5、浏览函数 void display(int a) 声明整形变量 i 和 b,其中 i 记录输出的职工序数,b 用来接收调用浏览函数时所传递过来的实参,接着将其值 传递给导出函数 load(b),使得导出的职工人数与浏览的职 工人数保持一致。通过调用 load 函数后,用 for 循环输出 每个职工的各种信息。 8、按姓名查询 void search_name() 声明整形变量 i 和字符形数组 name,调用导出函数 load,用 scanf 语句输入要查询的职工名字放在数组 name 里面。用 for 循环,循环主体是先判断中是否有输入的职 工姓名,如果有,用 printf 语句输出与职工名字相对应的 该职工所有信息,再跳出循环;如果没有,输出“查无此 人” ,并调用 search 返回查询菜单。 流程图同上 9、按学历查询 void search_xueli() 声明整形变量 i,k=0,char 形数组 xueli。调用导出函 数 load(*P),用 scanf 语句输入要查询的职工学历放在数 组 xueli 里面。考虑到与前两种查询方式不一样的是,可 能有多个职工具有相同的学历,所以循环主体较之前稍有 变化。即在判断并执行第一次后不用 break,而是继续循环, 直到找出所有该学历的职工。为解决输入错误而提示“查 无此人”的问题,就需要再写一段 for 循环代码,通过计 量数 k 记录循环的次数,若直到循环到最后一次仍无结果 输出,则表示输入错误,这时用 printf 输出“查无此人” , 并调用 search 返回查询菜单。 流程图同上 10、 ,删除函数 void del(int *b) 声明整形变量 i,j,t,m,a 和 char 形数组 name。其中给 a 附初始值 a=*b,表示当前职工人数。首先调用浏览函数 display(a),显示所有职工信息,便于使用者审阅需删除 的对象。用 printf 语句提示“输入要删除的职工名字” , 接着用 scanf 语句输入删除对象名字。用 for 循环,循环 主体是先判断中是否存在所输入的名字。若存在,printf 语句提示是否确认删除,用 scanf 语句输入确认指令,再 用 for 循环从要删除的这个职工开始,依次用后一个职工 的信息覆盖前一个的。循环结束后当前职工人数 a 自减 1, 并保存,跳出大循环;若不存在,输出“输入错误,无此 人” 。再将 a 的新值附给*b,实参 p 所指的人数地址中的人 数也随即改变删除后的人数。printf 提示下一步操作“继 续删除请按 1 浏览信息请按 2 返回主菜单请按 3”。switch 根据键盘输入的指令代号选择下一步连接的函数。 11、添加函数 void add 声明整形变量 i,n,m,定义文件指针 fp,用追加的方式 打开文件“d:/“,若打开失败,退出。若成功,继续下面 操作。printf 提示“输入要添加的人数” scanf 输入要添加的人数存放在 n。用 for 循环输入要 添加的职工信息,再用另一个 for 循环将输入的新信息追 加写入“d:/“文件保存。关闭文件。再调用 switch 语句选 择下一步操作,并连接到相应函数。 流程图与删除函数类似。 33 调试与测试:。 遇到最大的问题是所有程序代码编完放在一起后,虽 然能够成功运行,但使用时如果职工人数发生变化,会导 致文件后部出现乱码。若要使每次运行都正常,必须在人 数改变后退出程序,修改宏定义 N 的值。这样很不方便, 不能够连续运行。为解决这一大问题,最后我想到了定义 一个全局指针变量,用来追踪最新的人数。特别是删除和 添加这两个会导致人数变化的函数中,全局指针变量 p 起 了很大作用。经过一边修改一边调试,最终可以成功的用 p 串联整个函数,在连续运行时,总能根据最新的人数调用 各个函数。另外在串联所有函数时,调试提示出错:有几 个函数“redefinition; different basic types”解决: 在函数名前加 void 指明类型。 整个程序代码是分块书写的,每个函数都可以独立运 行。只有输入函数查询菜单函数写得很顺利,一次性就能 够成功运行,其他函数在调试过程中或多或少都出现了问 题。 1、保存函数 save()在调试和链接的时候都没有出现错 误提示,但在运行的时候出现了问题。写入指定位置的文 件,打开后总会有乱码。与 c 语言课本上的例题对照后发 现,我写的 fopen(“d:/bbb“,“w“)没有指定文件的存储类 型。解决方法:在文件名 bbb 后面加上.txt 后即可。 2、导出函数 load()遇到两个问题。1 是为图方便直接 将保存函数复制过来进行修改时,忘了修改文件的打开方 式,不能运行。经多次检查后终于发现了,解决:将只写 “w“改为只读“r“。2 是用 fscanf 语句时,漏写地址符。调 试和链接都没问题,但点击运行后,总出现一个提示出错 的蓝色小窗口。经老师提时候发现了错误所在。解决:在 等之前加上地址符。 3、浏览函数 display()遇到的问题虽然不大,但解决 起来很麻烦。理想的运行结果是美观整齐。即下面的职工 信息分别与第一个 printf 输出的中文项目提示对齐。解决 方法:不断修改空格个数,不断运行察看效果。 4、按学历查询函数 search_xueli(),要考虑输入一种 学历,可能对应出很多职工,这就不能延用按姓名和职工 号查询中判断是否输入错误的方法了。为了显示出所有具 有该学历的职工,就需要让 for 循环一直运行到最后一个 为止。这时计量数 i 始终会等于职工人数,不能再用 i 来 判断是否不存在此人。这就需要再定一个整形变量 k,用来 计量单独的一个循环次数。 5、删除函数 del()的难点在于多次删除。即在删除掉 第一个人以后,现有职工人数发生改变,而宏定义中的 N 却是不变的。最开始我想到了用 static 定义一个整形变量 a 来计量当前人数。这在单独运行删除函数时,可以成功的 连续删除。最后所有函数串在一起时,有了更好的解决方 法,全局指针。 6、添加函数 add()遇到的问题是用 printf 输入新职工 信息后,保存到文件里面,发现原有的信息不见了。解决: 文件打开方式改用“a“追加写入。 经过一学期的 C 语言学习,我们掌握了 C 语言的基础 知识,能够读懂别人用 c 语言设计的程序。平时的程序设 计大多是以填空的形式出现,虽然有所接触,但都不完全。 而这两周的课程设计,却让我们完完全全用自己学到的知 识编写一个完整的体统程序。这是一个新的挑战,也是一 种新的学习。 我们组选择的是备选题目中的第一个职工信息管 理系统。这需要我们自己设计一个系统,可以输入信息, 保存到文件里,再从文件里调出来,使之显示在屏幕上, 进行删除、添加等对信息的修改。初看到这个题目觉得很 简单,但当我做到电脑前准备开始编写代码的时候才发现 无从下手。通过去图书馆查找程序设计相关的书籍,和上 网参考前人编写的类似程序,我脑中才有了一个大概方向。 终于开始着手写下了第一段输入函数的代码,因为这 是我们平时课堂上用的最多最熟的 printf 语句,写了很长 一大段,调式运行竟然成功了,顿时信心倍增。于是我开 始迫不及待的开始写第二段保存函数。我记得第一天下来, 我只写好了这两个函数,但还是很开心,因为这是我编的 第一个小系统的成功的开始! 接下来几天都在宿舍整个下午的对着电脑不断的编译、 调试、修改,每次编好一个能够成功运行的程序,都会感 到很欣慰,并增加继续下去的信心。当然其中也有遇到困 难的时候。好几次遇到编好的程序调试没有错误,却偏偏 不能运行这种情况,自己编的程序自己很难发现当中的错 误,而电脑又没有提示,这时候就很受打击,也会着急。 反复检查都找不出毛病来的时候就会有想要放弃的念头。 有时候就直接关机去做别的事情,等再开始做程序的时候, 才发现先前的错误所在。这时候会有一种“柳暗花明又一 村”的欣慰感觉。总之,遇到困难,可以先放一放,让脑 子休息一下,忘掉错误的记忆。或许等过段时间再回过头 来,就会很容易的发现之前的错误了。随着编好的程序越 多,累积的经验也越多,查找错误就越快了。还有会发现 很多程序有很多相似之处,可以通过复制修改的发式来编 写。虽然题目要求只需要一种查询方式,但当我编出规律 之后自然就想多写两个,写完就会有很大的成就感了。 在课程设计的过程中,还有一件很倒霉的事。7 月 5 号 早上我们有一门考试,靠前还需要复习的那种。所以我打 算 4 号早上写会儿程序,从下午开始就复习第二天要考的 科目,结果从早上开始写删除函数的代码,一边调试,一 边修改 ,越来越接近成功,越激动越投入,等最后终于完 成的时候猛然发现已经下午 4 点多了。乘着兴致高,一口 气把添加函数也写出来了。虽然只能把复习挤到晚上进行, 但因为编好了两个很难的程序代码,觉得这一天还是很有 成就感的,很开心。结果不幸的是,等我第二天考完试回 来打算继续编的时候,才发现之前辛辛苦苦编的两段代码 没有保存。没办法,只能重新写。 当所有功能函数都编好后,我用主函数将他们串起来, 这是遇到最大的问题就是经过删除、添加后职工人数会发 生变化。想了很久,又翻以前的课堂笔记,最后想到了定 义全局指针变量来解决这个问题。这个问题的成功解决预 示着我们的职工信息管理系统大功告成! 总之,经过这一次的课程设计,我们体会到了痛苦与 快乐同存的感觉。当最后一次成功串联运行所有函数时, 真的很开心。通过这次实践,我们能够更熟练掌握 C 语言, 特别是循环和文件,当时在课堂上没有学太清楚的,这个 程序设计之后都很明白了。同时增加了我们对程序设计的 兴趣,暑假回家我还会尝试着做一些其他的小系统。 #include #include #define N 6 struct employee int number,age,wage; char name,sex,address,xueli; long int telephone; em; int a=N; int *p= main() void search(); void search_name(); void search_xueli(); void search_number(); void load(); void display(); void del(); void input(); void add(); void save(); int n; printf(“ “); printf(“ *职工信息 管理* “); printf(“ “); printf(“ 1. 录入职工信息 “); printf(“ 2. 浏览职工信息 “); printf(“ 3. 查询职工信息 “); printf(“ 4. 删除职工信息 “); printf(“ 5. 添加职工信息 “); printf(“ 6. 退出 “); printf(“ “); scanf(“%d“, switch(n) case 1:printf(“ 输入 职工信息 “);printf(“ “);input();main();break; case 2:printf(“ 浏览 职工信息 “);printf(“ “);display(*p);main(); break; case 3:printf(“ 查询 职工信息 “);printf(“ “);search();break; case 4:printf(“ 删除 职工信息 “);printf(“ “);del(p);break; case 5:printf(“ 添加 职工信息 “);printf(“ “);add(p);break; case 6:exit(0);break; default :break; void input() int i; for(i=0;i printf(“请输入职工号: “); scanf(“%d“, printf(“请输入姓名: “); scanf(“%s“,); printf(“请输入性别: “); scanf(“%s“, printf(“请输入年龄: “); scanf(“%d“, printf(“请输入学历: “); scanf(“%s“,em.xueli); printf(“请输入工资: “); scanf(“%d“, printf(“请输入住址: “); scanf(“%s“,em.address); printf(“请输入电话: “); scanf(“%d“, printf(“ “); printf(“ 创建完毕! “); save(N); void save(int m) int i; FILE*fp; if(!(fp=fopen(“d:/“,“w“) printf(“打开失败“); exit(0); for(i=0;i fprintf(fp,“M %8s %5s %8s %8s “,em.number, ,em.sex,em.age,em.xueli,em.wage, em.address,em.telephone); fclose(fp); void load(int b) int i; FILE*fp; if(!(fp=fopen(“d:/“,“r“) printf(“打开失败“); exit(0); else for(i=0;i fscanf(fp,“%8s%5s%8s%8s “, fclose(fp); void display(int a) int i,b=a; load(b); printf(“ 职工号 姓名 性别 年龄 学历 工资 住址 电话 “); for(i=0;i printf(“%d %8s %s %d %8s %d %s %d “,em.number,,em.sex,em.age,em.xueli,em.wage, em.address,em.telephone); printf(“ “); void search() int t; printf(“ 按职工号查询按 1 按姓名查询请按 2“); printf(“ 按学历查询请按 3 返回主菜单请按 4 “); scanf(“%d“, switch(t) case 1: printf(“ 按职工号查询 “); search_number(); break; case 2: printf(“ 按姓名查询 “); search_name(); break; case 3: printf(“ 按学历查询 “); search_xueli(); break; case 4:main();break; default : printf(“输入错误,请重新输入! “); search(); break; void search_number() int i,number; load(*p); printf(“ 请输入要查询的职工号:“); scanf(“%d“, for(i=0;i if(number=em.number) printf(“ 该职工信息如下: “); printf(“ 职工号 姓名 性别 年龄 学历 工资 住址 电话 “); printf(“ %d %8s %s %d %8s %d %s %d “,em.number,,em.sex,em.age,em.xueli,em.wage, em.address,em.telephone); printf(“ “); break; if(i=*p) printf(“ 查无此人 “); search(); void search_name() int i; char name; load(*p); printf(“ 请输入要查询的姓名:“); scanf(“%s“,name); for(i=0;i if(!strcmp(,name) printf(“ 该职工信息如下: “); printf(“ 职工号 姓名 性别 年龄 学历 工资 住址 电话 “); printf(“ %d %8s %s %d %8s %d %s %d “,em.number,,em.sex,em.age,em.xueli,em.wage, em.address,em.telephone); printf(“ “); break; if(i=*p) printf(“ 查无此人 “); search(); void search_xueli() int i,k=0; char xueli; load(*p); printf(“ 请输入要查询的学历:“); scanf(“%s“,xueli); for(i=0;i if(!strcmp(em.xueli,xueli) printf(“职工号 姓名 性别 年龄 学历 工资 住址 电话 “); printf(“%d %8s %s %d %8s %d %s %d “,em.number,,em.sex,em.age,em.xueli,em.wage, em.address,em.telephone); for(i=0;i if(!strcmp(em.xueli,xueli) break; else k+; if(k=*p) printf(“ 查无此人 “); search(); void del(int *b) int i,t,j,m; int a=*b; char name; printf(“ 所有职工信息: “); display(a); printf(“ 请输入要删除职工的名字:“); scanf(“%s“,name); for(i=0;i if(!strcmp(,name) printf(“ 确认删除请按 1 取消请按 2 “); scanf(“%d“, if(t=1) for(j=i;j em.age=em.age; em.wage=em.wage; em.number=em.number; em.telephone=em.telephone; strcpy(em.xueli,em.xueli); strcpy(,); strcpy(em.address,em.address); strcpy(em.sex,em.sex); a-; save(j); brea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设立专项奖惩管理制度
- 设计公司薪金管理制度
- 访客接待前台管理制度
- 诊所医保病案管理制度
- 诊所老板日常管理制度
- 试剂管理库存管理制度
- 财务进项发票管理制度
- 货场大门车辆管理制度
- 货物防盗措施管理制度
- 游戏培训协议书范本模板
- 物流调度述职报告
- 康复护理行走障碍指导步行训练课件
- 钢结构用高强度大六角头螺栓连接副知识培训
- 2025年语文素养“诗词大会”知识竞赛题库及答案
- 《智能网联汽车用数据分发服务(DDS)测试方法》
- 《花的话完整》课件
- 《上海市温室气体排放核算与报告指南(试行)》(SHMRV-001-2024)文
- 文献学 重点知识全套
- 儿科学(石河子大学)知到智慧树章节测试课后答案2024年秋石河子大学
- 工程售后服务管理方案
- DB43∕T 862-2014 保靖黄金茶 毛尖功夫红茶
评论
0/150
提交评论