


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计综合训练设计报告专业:数字媒体技术班级:11媒体Z学号:11145107姓名:朱毅指导教师:陈湘军陈明霞成绩:-计算机项目学院2018年10月第一部分题目1. 编写函数int hamming(int x,int y,char a,char b实现以下功能:先将形参 x和y分别转换为2个合法代码并按从低位到高位的顺序为别保存2个合法代码的码距,函数返回该码距。2. 编写函数main)函数实现以下功能:声明字符数组a、b和变量m、n输入两个整数冰保存到 m和n中,若m、n的值在032767范围内则用m、n和数组a b做实参调用haming函数,计算由m和n生成的两个合法代码的码距输出的到屏
2、幕 及文件myf2.out中。最后将考生本人的准考证号输出到文件myf2.out中。来自:2009年秋)上机试卷03)的编程题。解题的基本思路:子函数就是将形参X,Y分别转换为2个合法的代码并按从低位到高位的顺序分 别保存2个合法代码到a和b指向的数组中,在计算 a数组和b数组中的两个合法 代码的码距,函数返回码距。主函数就是调用子函数,并输出结果设计方案:(1)功能模块框图:算法设计:<1)算法描述:因为hamming函数需要分别将两个整数转换为合法代码,因此编写函数“ void bin(int n,char str> ”。Bin函数的功能是将形参n转换为合法代码并保存到b指向的
3、 一维数组中。Hamming函数先两次调用bin函数,分别将形参X和Y转换为合法代 码并分别保存到a和b指向的一维数组中,在用循环语句从前向后遍历 a和b指向 的数组各元素,函数最后返回统计结果。<2)实现方法:用 VC6.0 软件进行调试,分析,输入 m,n 两个值,进行分析,调用函数 hanmmingv),在从 hanmmingv)函数中调用函数 bin<),返回 count的值,输 出,a,b数组中的值和返回值count的值。源代码:#include<stdio.h>void bin(int n,char str>int i=15,j 。while(n!=0
4、>stri-=n%2+'0' 。n/=2。for(j=0。jv=i。j+>strj='0' 。str16='0' 。int hamming(int x,int y,char a,char b>int count=0,i 。bin(x,a> 。bin(y,b> 。for(i=0。i<16。i+>if(ai!=bi>count+ 。return count 。void main(>char a17, m,n,x。FILE *fp。fp=fopen("myf2.out&quo
5、t;,"w"> 。if(fp=NULL>printf("error"> 。doscanf("%d,%d",&m,&n>。while(m>32767&&m<0&&n>32767&&n<0>。x=hamming(m,n,a,b>。printf("n%sn%sndistance of %d and %d is %d n",a,b,m,n,x> 。fprintf(fp,"n%sn%sn
6、distance of %d and %d is %d n",a,b,m,n,x> 。fprintf(fp,"11145107">。fclose(fp>。程序调试:就是输入的时候,n和m的值范围问题,当输入范围不正确时候跳不出来解决方法:用一个dowhile。循环条件为大于32767和小于0的时候退出V- Pdo<弓ruF宠d塔(T启益n);while(in>32767B&n<0&fen>32767&&n<0);测试:16r800000000000100000000000030301S
7、00distance of 16 and 8 is 2 Ppess anv key to continue第二部分职工信息管理系统<1)题目名称:职工信息管理系统内容: 职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电 话等<职工号不重复)。试设计一职工信息管理系统,使之能提供以下功能:1、职工信息录入功能 ( 职工信息用文件保存,也可不用 >2、职工信息浏览功能3、排序:按工资排序4、查询或排序功能: ( 至少一种查询方式:顺序、折半查找) 按工资范围查询5、职工信息删除、修改功能 (任选一项 ><2)解题的基本思路 程序采用模块化,每一个模
8、块对应一种功能,调用函数予以实现,分别为 7 个 模块,分别是创建与添加模块、显示模块、查找模块、修改模块、删除模块、存档 模块、文件统计模块、退出模块,把复杂的问题分成每一个独立功能的小问题来解 决。<3)设计方案1、功能模块图(4)算法设计该程序主要分为7个模块,分别是创建与添加模块、显示模块、查找模块、修改模块、删除模块、存档模块、文件统计模块、退出模块void Add(Node创建与添加模块:该模块的功能是输入职工信息。函数为*woker>原理:采用尾插法,先建立链表与头结点,新增一个结点,键盘输入职工号、职工姓名、职工性别、职工出生年月、职工学历、职工职位、职工工资,将这
9、些信 息存储到新增结点中,将新增加的节点连到链表的尾端,如此以往,将尾结点的指 针域置空,这样就得到了一条存储职工信息的链表,这样就完成了职工信息的创建 与增加。显示模块:该模块功能是显示职工信息。函数为 void Disp(Node *woker> 原理:先新建一个指针 P 指向头结点,判断它的指针域是否为空,若为空,则 输出“没有记录可以显示”;若不为空,则输出它的指针域所指向节点所储存的职 工信息,并将该指针向后移一个结点,直到 P 指向空,即输出了所有职工的信息, 这样就完成了所有职工信息的显示。查找模块:该模块功能是查找职工信息。函数为 void Tongji(Node *wo
10、ker> 原理:该模块分为两种查找方法,分别是按职工号查找和按职工姓名查找,因 为这两种查找方法雷同,所以这里将只解释按职工号查找的原理。先键盘输入一个 要查找的职工号并新建一个指针 P 指向头结点,判断它的指针域是否为空,若为 空,则输出“没有资料可以统计分类”,若不为空,则判断它的指针域所指向节点 所储存的职工信息中的职工号,若相等,则输出这个职工的其他所有信息,并将 P 指向下一个结点,再次进行判断,直到 P 指向空,即输出了所有查找到的信息。若 不相等,则 P 指向下一个结点,再次进行判断,直到 P 指向空,即输出了所有查找 到的信息,这样就完成了职工信息的查找。修改模块 :该模
11、块功能是修改职工信息。函数为 void change(Node *woker> 原理:根据查找原理,查找到要修改信息的职工,删除这一节点,并新建一个 节点,键盘输入想要修改的内容,并储存到新的结点中,将新的节点连接到链表中 原先删除结点的位子,这样就完成了职工信息的修改。删除模块:该模块功能是删除管理职工信息。函数为 void dismiss(Node *woker>根据查找的原理,查找到要修改信息的职工,删除这一节点,并将其前驱结点 的指针域指向其后继结点,这样就完成了职工信息的删除。存档模块:将内存中的信息存储到文件中。函数为 void save(Node *woker>
12、 原理:打开文件,新建一个指针 P 指向头结点,判断它的指针域是否为空,若 为空,则输出“无记录”,若不为空,则将这个职工的所有信息输入到文件中,并 将P指向下一个结点,直到P指向空,即输入了的信息,void load(Node文件统计模块:打开文件,统计职工数目,并输出。函数为*woker>退出模块:该模块功能是退出管理档案<5)程序调试与测试:欢迎界面:-+ X:1115113?素翻*1iF11»1职工継碁暮统1rrri*1 r ri-主界面:创建与增加模块:输入职工信息为:职职职职工出职职职工号工姓名工性别生年月工学历工职位工工资1001Af11bena02002B
13、m22benb03Cf33benc3004Dm44ben4000输入第一次时:输入第二次时:输入第三次时:输入第四次时:请你输入黒丁号诃 清输A姓名汕 请输人<1别;请樹人岀三年月:也情雷入学厉:诙 请输入聃位:d 请辅入工贸汽蚱>»»»>»Sjj5it!妙肝握亍.;辅.请f殛入杠号:显示模块:输入四次后显示的结果为:V 1 CsUwnzyVDesBtop'rC warkDebugVAjB$e'-* X输A序号曰昼亍结星*班工号胆工蛀名职工性剧唱呂昂需工叛职工肥检职工工贺1fi£11benA1HWZBHi
14、63;2turnh2HW3Cf33bunu4D414b«ind4RAH>查找模块: 输入查找职工号为3的职工信息:输入查找职工姓名为c的职工信息:辅入你更统刘龙英的鬆工旌容血胡工号职工生3CS职工性别f职工主日33职工老历 职工职也 职工工贾tlEHc3MB共査携到1条记录:修改模块:修改职工号为3的职工信息为:职工号职工姓名职工性别职工出生年月职工学历职工职位职工工资21 -吃!?斛亠S.:?;rrltEwJ hKiL 二 l-f.we I-宁-Jt一-T." 一-TJ 于 匣匝IC片炫 路會聲 髯二一亠一 _兰二n- tAAAAAX. >>宀一雷谙诸&
15、gt;»»»»职工信息变成:职工号职工娃名职工41别聪Z生日'职工学历职:i职工工贺1 (1f111店科血2BH22»|h2NHHF1f55ZPTH4EIwfi4朗5删除模块:删除职工号为5的职工信息:删除后的结果为:ERI号职工姓屯肛性别Hi:T苗皋职工生日明工学历职工耶竝脱工工资1囱f11lew>B口22bvnh4>n钊benA4BW退出模块:<6)总结此次实践课编写的是一个应用程序,相对于以前我们见到的程序,它要大得 多,运行的结果也没有预想中的好,数据的输出格式不太规范,而且各模块也出现 了一些小问题,我很有耐
16、心的一次又一次的进行修改,最后运行的结果基本上达到 了预期的目的。本次 C 语言的实习课让我对 C 语言的学习又有了更深入的了解,也让我更深刻 地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在 课堂上学到的,这次程序设计课让我增添了许多程序设计经验,为我们将来走上工 作岗位其了不小的铺垫作用。本次实习中遇到了很多以前没有遇到过的问题,也曾想过要放弃,但看到那些 同学都在那认真的写程序,给了我继续的信心。在同学和老师的帮助下,我顺利的 结束了本次实习,让我知道原来凭借自己努力取得的成功会让自己这么欣慰。<7)附录:源代码#include <stdio.h>
17、; #include <stdlib.h #include <string.h>struct wokers/ 定义一个 woker 的结构体char num10 。/职工号char name15 。/职工姓名char sex15 。/职工性别char birthday15 。/ 职工出生年月char degree10 。/ 职工学历char position10 。/ 职工职位char salary10 。typedef struct node/ 职工工资struct wokers data。/建立一个链表。struct node *next 。Node 。void Add(
18、Node *woker>/添加记录Node *p,*r,*s 。char n10/ 先用于输入职工号 ,也用于判断是否跳出循环r=woker 。s=woker->next 。 /使 s 为第一个有用的结点while(r->next!=NULL> / 这个循环的作用是使 r 为最后一个有用的结点r=r->next 。/ 将指针置于最末尾while(1>printf(">>>>>>>>>> 提示 :输入 0 则返回主菜单 !n"> 。printf("n 请你输入职工号
19、 :"> 。scanf("%s",n> 。if(strcmp(n,"0">=0> break 。p=(Node *>malloc(sizeof(Node>> 。 / 申请空间strcpy(p->data.num,n> 。printf("n 请输入姓名 :"> 。scanf("%s",p->> 。printf("n 请输入性别 :"> 。scanf("%s",p->d
20、ata.sex> 。printf("n 请输入出生年月 :"> 。scanf("%s",&p->data.birthday> 。printf("n 请输入学历 :"> 。scanf("%s",&p->data.degree> 。printf("n 请输入职位 :"> 。scanf("%s",&p->data.position> 。printf("n 请输入工资 :">
21、 。scanf("%s",&p->data.salary> 。printf(">>>>>>>>>> 提示 :已经完成一条记录的添加。 n"> 。 p->next=NULL 。r->next=p 。 / 这一步是必需的 , 将 p 与先前的链表连起来构成一条新链表r=p。/也是必需的 .将 r 又重设为新链的最后一个有用结点void change(Node *woker>/修改职工信息函数Node *p 。char find20 。if(!woker-&
22、gt;next>printf("n>>>>>>>>>> 提示 : 没有资料可以修改 !n"> 。return 。printf(" 请输入要修改的职工号 :"> 。scanf("%s",find> 。p=woker->next 。while(p!=NULL>if(strcmp(p->data.num,find>=0> / 如果找到的话返回的是符合要求 break 。p=p->next 。if(p>int x 。w
23、hile(1>printf(" 完成修改请输入 0 否则输入任意数再进行修改 :"> 。 scanf("%d",&x> 。if(x=0>break 。 printf(" 请输入新职工号 (原来是 %s >:",p->data.num> 。 scanf("%s",p->data.num> 。printf(" 请输入新职工姓名 (原来是 %s >:",p->> 。scanf("%s"
24、,p->> 。printf(" 请输入新职工性别 (原来是 %s >:",p->data.sex> 。 scanf("%s",p->data.sex> 。printf(" 请输入新出生年月 ( 原来是 %s >:",p->data.birthday> 。 scanf("%s",p->data.birthday> 。printf(" 请输入新职工学历 (原来是 %s >:",p->data.deg
25、ree> 。 scanf("%s",p->data.degree> 。printf(" 请输入新职工职位 ( 原来是 %s >:",p->data.position> 。 scanf("%s",p->data.position> 。printf(" 请输入新职工工资 (原来是 %s >:",p->data.salary> 。 scanf("%s",p->data.salary> 。printf("n>&
26、gt;>>>>>>>> 提示 : 该项记录资料已经成功修改 !n"> 。else printf("n>>>>>>>>>> 提示 : 你要修改的信息不存在 !n"> 。void Disp(Node *woker>/ 输出职工信息Node *p 。p=woker->next 。if(!p>printf("n>>>>>>>>>> 提示 : 没有记录可以显示 !n&q
27、uot;> 。return 。printf("tttt 显示结果 n"> 。printf(" 职工号 职工姓名 职工性别 职工生日 职工学历 职工职位 职工工资 n"> while(p>printf("n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn",p->data.num,p->,p->data.sex,p- >data.birthday,p->data.degree,p->data.position,p->data.sala
28、ry>。p=p->next 。void Tongji(Node *woker> / 查找统计函数Node *p 。int sei。 int flag2=0,ha=0。char find20 。p=woker->next 。if(!woker->next>/ 若链表为空printf("n>>>>>>>>>> 提示:没有资料可以统计分类 !n"> 。return 。printf(">>>>>>>>>> 提示
29、:n=>0 退出 n=>1 按职工号统计 n=>2 按职工姓名名称统计 n">。scanf("%d",&sel> 。if(sel=1>printf("n 输入你要统计分类的职工号 :"> 。scanf("%s",find> 。while(p>if(strcmp(p->data.num,find>=0>flag2+ 。if(flag2=1&&ha!=flag2> printf(" 职工号 职工姓名 职工性别 职工生日
30、 职工学历 职工职位 职工工资 n"> 。printf("n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn",p->data.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary>。ha=flag2 。else if(flag2>ha>printf("n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn",p-
31、>data.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary>。 ha=flag2 。p=p->next 。if(flag2>printf("n* 按 设 备 号 %s 统 计 分 类 的 有 %d 条 记录 :*nn",find,flag2>。else printf("n 按职工号 %s 统计的结果为 0 个 nn",find> 。 else if
32、(sel=2>printf("n 输入你要统计分类的职工姓名 :"> 。scanf("%s",find> 。while(p>if(strcmp(p->,find>=0>flag2+ 。if(flag2=1&&ha!=flag2> printf(" 职工号 职工姓名 职工性别 职工生日 职工学历 职工职位 职工工资 n"> 。printf("n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn",p->da
33、ta.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary>。ha=flag2。else if(flag2>ha>printf("n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn",p->data.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.
34、position,p->data.salary>。 ha=flag2 。 p=p->next 。if(flag2>printf("nnn 共查找到 %d 条记录 :nn",flag2> 。else printf("n 按职工姓名 %s 统计分类的结果为 0 个 nn",find> 。 else if(sel=0> return 。void load(Node *woker>Node *p,*q 。FILE *fp 。/指向文件的指针int recordNum 。/ 统计记录数if(fp = fopen(&q
35、uot; 职工管理系统 .txt", "rb">> = NULL>/ 打开文件printf("can not open filen"> 。/ 不能打开p=woker 。recordNum = 0 。while(!feof(fp>>q=(Node*>malloc(sizeof(Node>> 。fscanf(fp, "%s %s %s %s %s %s %s",p->data.num,p->,p->data.sex,p->data.b
36、irthday,p->data.degree,p->data.position,p->data.salary>。 /* 从文件读入记录 */q->next=NULLp=q。recordNum+ 。fclose(fp> 。printf(" 文件里共有 %d 条记录 :n",recordNum> 。void save(Node *woker> / 将职工信息保存到文件int n 。Node *p 。FILE *fp 。/ 指向文件的指针printf(" 需要保存到文件吗 ?<1保存, 0不保存) ">
37、; 。scanf("%d",&n> 。if(n=1>if(woker->next=NULL>printf(" 无记录 "> 。else p=woker->next 。if(fp = fopen(" 职工管理系统 .txt", "wb">> = NULL> / 打开文件,并判断打开是否正常 printf("can not open filen"> 。/ 打开文件出错while(p!=NULL>fprintf(fp,"
38、;%s %s %s %s %s %s %s",&p->data.num,&p->,&p->data.sex,&p->data.birthday,&p- >data.degree,&p->data.position,&p->data.salary> 。fclose(fp>/关闭文件void dismiss(Node *woker>/删除职工信息函数Node *p,*r,*s 。char find10 。if(!woker->next>printf("n>>>>>>>>>> 提示 :没有资料可以显示 !n"> 。return 。printf("n>>>>>>>>>> 提示:请输入您要删除的职工号 !n"> 。scanf("%s",find> 。p=woker->next 。while(p!=NULL>if(strcmp(p->data.num,find>=0>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 线框项目投资可行性研究分析报告(2024-2030版)
- 税务师网校课件评价
- 星空主题商业计划书
- 2024年中国金属铥行业市场深度评估及投资方向研究报告
- 弹簧酒架项目投资可行性研究分析报告(2024-2030版)
- 2025年中国品牌燕麦片(麦片) 未来发展趋势分析及投资规划建议研究报告
- 中国凤凰木行业市场发展现状及投资潜力预测报告
- 2025-2030年中国化肥检测筛行业深度研究分析报告
- 2025年中国冲洗器市场运行格局及投资战略研究报告
- 2023-2029年中国房产建筑行业发展前景预测及投资规划建议报告
- wedo2完整版本.0第一课拉力小车
- 超声检查健康宣教课件
- 广西创业担保贷款培训课件
- 珠宝行业市场竞争与监管研究
- 会员经理培训课件
- 《现场改善技巧》课件
- 国开电大《人文英语3》一平台机考总题库珍藏版
- 高中政治必修三政治与法治考点专练选择题100题含答案详解
- 玻璃隔断墙施工方案
- Python GUI设计:tkinter菜鸟编程
- 新家庭如何塑造人
评论
0/150
提交评论