《高级语言程序设计》课程设计报告及示例

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《高级语言程序设计》课程设计报告(2014――2015年度第二学期)
题目通讯录管理
专业计算机科学与技术
班级2014级B班
小组成员李丽丽2009022899
班级2009级计本四班
《高级语言程序设计》课程设计
成绩评定
指导教师:
摘要:通过本课程设计,对程序控制结构、数组、结构体、函数、文件等的应用进行综合训练,并初步接触软件设计的基本步骤。

本设计实现关键词:控制结构,数组,结构体,函数,文件
一、课程设计的目的与要求
通过实践训练,进一步掌握C语言程序控制结构、数组、结构体、函数、文件的使用方法,提高程序编写调试的实际能力,培养初步的工程设计能力和综合分析、解决问题的能力。

具体如下:
1.学习和实践在分析和设计计算机应用系统所需要的知识,包括功能分析和模块划分、函数设计、
数据的结构分析、设计和存取操作;
2.熟悉Visual C++的代码编制和调试过程;
3.初步培养文档的编写能力;
4.培养协作能力和团队精神。

二、设计正文
1.概述
1.1课题题目:通讯录管理
1.2系统的主要目标:
本系统目标是实现通讯录管理的功能,对姓名、群组、住宅电话、手机、Email、地址和备注信息进行输入、删除、查找和修改,数据存储于二进制文件。

1.3系统的开发环境及运行环境:
操作系统:Win dows XP Pro SP2
开发工具:Visual C++ 6.0
2.系统分析
1.输入记录:将每一个职工的姓名、ID号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据
作为一个记录。

?该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。

2.显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资。

3.修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。

4•查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示。

5.删除记录:可删除数据文件中的任一记录。

6•恢复记录:能恢复被删除的任一记录。

7.统计:(A)计算各项工资平均工资及总工资,(B)?统计符合指定条件(如职工工资前三项之和在2000元以上、2000~1500元、1500~1000元)以内的工资职工人数及占总职工人数的百分比。

(C)按字符表格形式打印全部职工工资信息表及平均工资(?包括各项总的平均工资)。

8 保存数据文件功能。

9.打开数据文件功能。

3.系统设计
3.1功能模块划分
3.2模块接口设计
(1)主程序模块tel.cpp
仅包含main()函数,提供对系统的主要控制。

在用户未选择退出程序时,通过一个循环不断显示菜单。

当用户选中某个操作后,根据返回的菜单代码select调用各函数完成相应的操作。

(2)菜单模块menu.cpp
将显示菜单用单独的函数实现,使菜单界面独立于其它程序代码,便于修改和维护。

Menu函数仅显示
主菜单,SubMe nu2函数仅显示更新联系人子菜单,这样各个菜单便于单独显示、清屏。

用户选择操作后,函数返回对应的菜单代码。

各函数功能描述如下:
int Menu (void); 主菜单,显示第一级菜单:查看通信录、更新通信录、备份通信录、退出。

int SubMenu2(void); “更新通信录”子菜单,显示:新增联系人、编辑联系人、删除联系人、返回
王菜单。

menu.cpp模块各函数之间的关系如图8.28所示:menu.cpp图8.28 menu.cpp 模块各函数间的关系
结构图MenuSubMenu2菜单代码
(3 )查看模块brows.cpp
以列表或单条记录的方式输出通信录。

各函数功能描述如下:
void List(Tel tel[], Index pAlphabet); 按pAlphabet 中指针数组的排序方式,调用PrintOne 函
数显示tel中所有的联系人,并显示排序后的序号i,便于用户选择联系人。

void Prin tHead(void); 输出表头。

void Prin tBottom(void);
输出表尾。

void PrintOne(Tel r, int i);
仅输出一个联系人r的信息,并显示序号i,便于用户选择联系人。

void Prin t(Tel r);
调用PrintOne函数输出表头及一个联系人的信息,不显示序号。

(4)更新模块edit.cpp
各函数功能描述如下:
void New(Tel tel[], I ndex *pAlphabet);
新增联系人。

添加到tel数组中第一个空着的位置。

之后需要对pAlphabet重新排序。

void Edit(Tel tel[], I ndex *pAlphabet);
编辑联系人。

编辑之后需要对pAlphabet重新排序。

void Delete(Tel tel[], I ndex *pAlphabet); 删除联系人。

此处做逻辑删除,仅将姓名赋空串。


除之后需对pAlphabet重新排序。

void Input(Tel *r, Tel tel[], int menu);
输入联系人信息。

新增或编辑联系人时,调用该函数来输入一个联系人的信息。

如果是新增(此时菜单代码menu=21),当用户选择只输入姓名时,需要为除姓名以外的信息设置缺省值;否则,除姓名以外的信息缺省保持不变。

int Duplicate(char *name, Tel tel[], char *original);
姓名查重。

在新增或编辑联系人前,调用该函数来检查是否有重名的情况。

新增联系人时,如果新输入的串name 与tel数组中已存在的姓名一样则返回1;否则,返回0。

编辑时可以输入与联系人原来的姓
名original —样的串。

int Select(); 选择联系人序号。

删除或修改用户选择的联系人时,调用该函数来限制序号在有效
范围内。

返回对应的数组下标。

(5 )排序模块sort.cpp
利用指针数组对通信录运用选择法排序。

各函数功能描述如下:
void SortByAlphabet(Tel tel[], I ndex *pAlphabet);
调用SelectSort函数,利用pAlphabet中的指针数组,对tel数组按音序排序。

void SelectSort(I ndex *p);
用选择法对指针数组p排序。

(6)文件操作模块file.cpp
完成系统与文件有关的操作。

各函数功能描述如下:
int Load(Tel tel[]. Index *pAlphabet); 读取。

将通信录文件fName读入内存tel,并对pAlphabet
排序。

返回读取的记录数。

int Save(Tel tel[]); 保存。

将通信录tel以fName (全局变量)为名保存到磁盘。

此时做物理删除:姓名为空串的联系人表示已删除,不存入通信录文件。

返回写入文件的记录数。

int Copy(void); 备份通信录。

复制通信录文件。

操作成功时返回1;否则返回0。

3.3系统流程描述
①输入:输入职工工资资料
通过结构体的数组来进行操作,先头定义数组em[],先输入需要输入的职工人数m,然后进入循环,
每次循环将各项输入结构体数组对应项的对应成员中,当循环次数等于人数时,完成全部员工的资料输入,
退出循环。

同时将数据储存在ckerk_list文件中并自动保存至磁盘。

注:如首次使用,尚未输入数据,请先输入数据。

输入的数据将自动保存。

再次选择输入功能时原数据将被覆盖。

②保存:将输入的资料存入磁盘
读取文件clerk_list,若文件不存在,打印“打开失败并退出。

若存在,则通过循环语句将输入到结构体数组的数据逐个输入磁盘。

③读取:读取磁盘中的资料
打开文件clerk_list,若文件不存在,打印“打开失败”并退出。

若存在,读取文件中的数据,并返回职工人数。

④显示:显示职工工资资料
先通过读取函数的返回值确定职工人数m,再通过循环将员工工资资料逐个打印,当循环次数达到m 时退出循环。

其中总工资由程序计算,总工资=基本工资+职务工资+津贴-医疗保险-公积金
⑤删除:删除某员工的资料
打印员工资料并提示输入要删除职工的姓名,输入后若该职工不存在则打印“查无此人”;若存在, 则显示该职工资料并询问是否确定删除。

若确定,则删除。

删除时,通过对比输入的姓名与资料中的姓名
做对比从而确定要删除的项i,从第i项开始,将后一项的各成员的值赋给前一项各对应的成员,完成对第i项的删除。

⑥添加:添加新的员工资料而不覆盖原有资料
打印原有职工资料,询问要添加的职工人数并询问是否确定添加。

逐个逐项输入员工信息,之后
程序计算其总工资。

完成后显示“添加成功”,打印新的员工资料并自动保存。

添加的方法为:定义一个
相同类型的结构体数组,将原有项复制后增添新的项,并保存新的数组。

⑦查找:按ID好查询与按姓名查找员工资料
根据提示输入要查询的ID号或姓名,程序通过循环语句将输入的数字与以保存的结构体数组中的
数据对比,若相同,则打印“已找到”及该员工的资料;当循环次数等于人数时结束循环,若至结束循环
时也没有找到相同的,则打印“查无此人”。

⑧修改:修改特定员工的特定资料
打印员工信息并提示输入要修改资料的职工姓名。

按提示确定要修改,确定要修改的项目,输入
要修改成的结果并将该结果赋给对应项的对应成员,完成对特定职工特定项目的修改。

⑨统计
通过循环对结构体数组中的每一项经行统计,计算工资总额为,将工资总额除以人数计算出平均工资。

根据每名职工的资料计算基本工资、职务工资、津贴之和在1000-1500圆1500-2000圆2000圆以上的员
工占总员工的百分比
4.详细设计
4.1.数据结构设计
系统的主要功能是管理联系人的信息,大部分模块中都用到联系人的信息。

联系人的结构定义如下:typedef struct Teleph one
{
char name[20]; // 姓名
int group;// 群组:1.朋友2.同事3.家人4.其他
char home[15];〃住宅电话
char mobile[15];〃手机char email[20];//Email char add[20];〃地址
char memo[20];〃备注
}Tel;
sort.cpp模块中利用指针数组对通信录排序,排序用的索引结构的定义如下:
typedef struct in dex
{
int len; // 数组长度
Tel *tel[MaxLe n]; // 指针数组,
}ln dex;
查看通信录
1
新增联系人21
更新通信录 2 编辑联系人
22 删除联系人23
返回主菜单
20
备份通信录 3
退出
联系人式代码
分组方式朋友同事家人其他
代码
1 2
3 4
全局变量
const int MaxLen=500; // 最多可存放500个联系人信息char fName[20]="tel.dat"; // 磁盘文件:通信录文
件名
int Len; // 全局变量,通信录中当前联系人总数
4.2人机对话(输入/输出格式)设计
(1)菜单操作
考虑使用键盘方式,用户输入菜单项前的0,1,2等数字字符来选择对应的菜单项,由menu.cpp模
块转换成相应的菜单代码。

用户选择菜单项并完成相应的操作后刷新菜单。

(2)显示与选择联系人
对通信录更新时系统自动按音序排序。

显示整个通信录时在每个联系人前面显示排序后的序号,用户按序号选择联系人进行操作。

对于操作结果为单个联系人的情况不显示序号。

(3)输入联系人信息
通过新增或更新输入联系人信息时,可以选择只输入姓名还是输入联系人的完整信息。

当用户选择只输入联系人姓名时,其余部分系统自动设成空值。

系统只提供了“ 1.朋友2.同事3.家人4.其他”四种联系人分组方式。

用户输入[1..4]来指定联
系人的分组。

当用户未指定时,系统自动设为4,代表“其他”分组。

输入联系人姓名时系统自动检查有无重名的情况。

更新输入时可以输入原来的姓名。

4.3控制结构设计
对每个函数的控制结构进行设计,以PAD图描述
(1)主程序模块
select=显d <菜单
select
2d
(2)更新模块
新增void New(Tel tel[], Index *pAlphabet)
修改void Edit(Tel tel[], Index *pAlphabet)
删除void Delete(Tel tel[], Index *pAlphabet)
二用户选抒的联忝人厅巧
(3)排序模块
void SortByAlphabet(Tel tel[], Index *pAlphabet)
选择排序void SelectSort(Index *p)
(4)文件操作模块
从磁盘读取通信录int Load(Tel tel[], I ndex *pAlphabet)
_______ e(Tel tel[])
扌|开—文件
fName
循环匕将诃中非空的数据写Afout
走闭文件fout
备份通信录int Copy(void)
5.编码和测试
选用Visual C++6.0作为开发工具:控制部分通过函数代码实现,数据部分采用数据文件实现永久存储,采用数组存储系统运行过程中的数据。

测试要点
①主菜单、子菜单是否能正确显示和刷新;对于选择的非法菜单号是否能识别和处理;
②排序是否正确,是否正确地处理了已逻辑删除的联系人;
③在增加、修改、删除联系人后,排序是否正确;
④保存、载入时,是否能正确地从数据文件读取数据;是否能正确地从备份的数据文件读取数据;
⑤各模块分开调试,组合后的正确性。

三、课程设计总结或结论
1.通过这次高级语言程序设计课程设计的实践训练,进一步掌握程序控制结构、数组、结构体、函数、文件的使用方法,提高程序编写调试的实际能力,初步建立软件工程的设计思想,培养初步的综合分析、解决问题的能力。

2.本系统基本实现了关键的功能模块,在功能上基本满足了用户的需求,但是由于时间较紧,有些
模块以及整个系统还有许多不完善的地方,如界面不美观,操作性不太友好等。

四、参考文献
[1]张海藩•软件工程导论(第4版)•北京:清华大学出版社,2005
[2]
[3]
[4]。

相关文档
最新文档