- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构大作业------工资管理系统
数据结构大作业------工资管理系统
计算机学院信息安全专业五班 王皓 31号 200530501359
系统功能:
系统具有两个用户等级—管理员等级与用户等级,均用用户名和密码登陆,进入不同的操作界面。管理员和用户的数据分别用“ad.txt”和“user.dat”保存。
a)管理员功能:
(1) 用户管理:增加、删除用户;
(2)记录的录入,修改,删除;
(3)查询:单项查询、多项查询、范围查询;
(4)分类统计,提供有代表性的统计结果。
b) 用户功能:
(1)修改密码
(2)查询本用户信息
(3)修改个人信息
(二)系统操作示例
a)登陆界面
说明:已定义的用户名与密码包括 (wh,669182),(yy,54321),(zy,54321),(tk,54321),用户可使用其登陆。而且可继续添加用户名。
已定义的管理员名与密码为(ad,111),管理员可使用其登陆。本系统只支持一位管理员。
b)用户功能选择界面
说明:在此界面可选择修改密码,查询个人信息,修改个人信息三个功能。
c)用户修改密码
d)用户信息查询页面
e)用户修改个人信息
f)管理员功能选择界面
g)管理员增加用户
说明:管理员可新增用户,但是不得与已存在的用户名相同
h)管理员删除用户
说明:管理员在右方的列表框里选择用户,可以对其进行删除。
信息查询页面
说明:该查询页面包括单项查询,多项查询,范围查询。查询结果酱在右方的列表框中显示。
1单项,多项查询示例
单项查询
多项查询
2范围查询
j)统计页面:
说明:统计页面可统计的数据包括“用户数量”,“最大年龄”,“最小年龄”,“平均年龄”,“最高工资”,“最低工资”,“平均工资”。
k)修改信息
说明:管理员可对用户的姓名,年龄,工资进行修改,不能对用户名和密码进行修改。
(三)所用到的数据结构:
a)链表:链表的特点是插入和删除操作比较容易,在本系统中用到了单向链表。
用到了链表的两个程序段:
1)删除用户:由于本系统采用二进制文件“user.dat”来保存数据,而从二进制文件中删除数据并没有特定的函数来实现,本系统采用先将数据从二进制文件中读入链表,在链表中删除后在将其写入二进制文件的方法。
优点:代码简明易懂
缺点:采用先读出再写入的方法删除数据效率不高,对于大量数据的处理不适宜。
改进方法:采用逻辑删除法。在结构中中增加一项用于记录该项是否要被删除,若要删除,实际上先不对其进行删除操作,而是在读入数据时找到被标志了要删除的结构,进行数据覆盖即可。
2)查询功能中的单项查询与多项查询:
由于单项查询和多项查询可合并为一种情况来处理,因此n个搜索条件将产生2n-1种情况(所有搜索条件都不选的情况不存在)。为了代码的简洁与高效,在单/多项查询中采用了链表。将文件中的数据先写入链表,在对是否采用某个搜索条件进行判断:若采用,则将链表中不符合搜索条件的节点删除,若不采用,直接跳过即可。
优点:采用链表后n个搜索条件只需要进行n次判断即可,提高了程序的效率,而且代码简单易懂。
缺点:由于数据并不是按一定顺序进行存储,无法进一步优化查找算法。
改进方法:数据按顺序存储,在搜索时可采用折半查找法,提高查找效率。
b)Cstring类:在本系统中多次用到CString类及其函数。
主要用到的函数包括:
Compare:比较两个字符串的大小
Find:在一个较大的字符串中查找字符或子字符串
Format:格式化字符串
IsEmpty:测试一个Cstring对象是否不含有字符
对CString类做类型转化:
与int的类型转化:CString-int:int=atoi(CString)
int-CString:CString.Format(“%d”,int)
与char[]的类型转化:char-CString:CString=char
CString-char: strcpy(char,(LPSTR)(LPCTSTR)CString)
(四)特殊技巧的说明:
1)单链表的删除多个值相同的节点:
在进行单链表的多个相同节点的删除时,由于节点可能在链表头,链表中,链表尾,因此进行条件判断较困难。因此,在进行删除之前,我设置了一个int型的变量来记录链表中要删除的节点的数目。在进行删除时,每删除一个节点,该值减1。当该变量不为0时,继续循环;当改变量为0时,跳出循环。从而简化了条件判断。
2)设置指针获得登陆时输入的用户名和密码
在用户功能界面要用到登陆时输入的用户名与密码,我开始设置了两个全局变量。但是全局变量很容易被误改,给程序带来副作用。使用CSalsaryDlg*ptr=(CSalsaryDlg*)::AfxGetApp()-GetMainW
原创力文档


文档评论(0)