C++程序设计大作业.docx
- 文档编号:9214824
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:14
- 大小:210.84KB
C++程序设计大作业.docx
《C++程序设计大作业.docx》由会员分享,可在线阅读,更多相关《C++程序设计大作业.docx(14页珍藏版)》请在冰豆网上搜索。
C++程序设计大作业
题目内容及要求
设计一个Database类
问题描述
设计一个Database类。
Database类是一个表的集合,而表又由行和列组成。
例如,下面的雇员信息表包含三个记录,每个记录有四个字段(Employee、Name、Department和Boss)。
雇员
姓名
部门
部门经理
111-11-1234
Cruz
ACC
Warder
213-44-5649
Johnston
MIS
Michaels
321-88-7895
Tom
FIN
Bearskin
基本要求
能够完成对数据库的基本操作;包括创建数据库,实现对数据库里面的表的添加,删除;以及能够完成对表结构的修改(如添加或删除字段),以及对表中的记录进行添加和删除;能够完成对使用适当的查询语言从一个或多个表中查找相关信息。
测试数据
可以选取高校人员(教师、学生、职工等)数据库作为测试数据
实现提示
Database类的公有接口包含如下数据成员:
•创建一个表。
•通过增加或删除字段修改表结构。
•删除一个表。
•在表中增加一个记录。
•从表中删除记录。
•用适当的查询语言从一个或多个表中查找信息。
其它要求
高校人员信息通常保存在文件里面,可以从文件里面读取人员信息;然后完成上面操作。
一、题目分析及小组成员及分工
1.题目分析:
简单来说此次程序设计就是要能实现数据库的基本功能。
即表的数据的管理,数据表的创建、修改、删除,数据表的修改就包括字段和记录的添加修改删除等功能。
而设计的第一步就是要完成对于表结构的设计。
数据表是一种二维结构,也就是由字段和记录组成的一张二维表。
由于记录和字段是要可以创建修改删除的,从而使用指针链队处理起来较为方便。
两个链队分别为字段链队和记录链队,前者最表中横向展开,记录链队纵向展开,每个记录链队的节点指向一条记录的数据项的队首,后者是由可选择数据类型的数据项组成的一个链队。
从而形成了整张数据表的结构。
具体如图所示2-1
图2-1-1
完成了数据表的结构设计,然后对其创建修改删除无非就是对于链表的操作,然后由几张数据表组成了一个数据库,在设计数据库类的时候同样建立一个指针链表将不同的表连接起来,方便进行处理和运算。
最后就是数据的存取问题,C++中所提供的IFSTREAM和OFSTREAM库能完成简单的文件存取功能,只要定义好存取数据的格式,便能方便的完成文件的存取功能。
2.人员分工
课题准备与讨论:
全体组员
确定设计最终方案:
全体组员
编码:
王加夫
调试与测试:
全体组员
二、各功能具体实现及分析
1.几个主要类的设计:
(1).数据项
(2).记录
(3).字段
(4).表
(5).数据库
2.功能实现即具体分析
(1).数据库的操作
a)数据库的创建
创建一个DataBase对象,添加到DataBase链队中,如果链队为空,队首尾指针均指向该对象,否则将其添加至队尾
b)数据库的删除
查找输入的数据库名,如果找到匹配的数据库,将该数据库之前的数据库的NEXT指向该数据之后的数据库,完成删除操作。
c)数据库的修改
输入要修改的数据库名,查找该数库,查找过程先获取tbf指针(tbf指向数据库链队的第一个对象),然后依次向后遍历,比较数据库名是否匹配,匹配就调用数据库修改函数,进行修改
(2).数据表操作
a)添加字段
输入添加字段的字段名和类型,获取字段链队的队尾指针,将该字段添加的队尾,并调用更新函数,为每一条记录分配一个该字段的数据项,赋予该数据项默认值。
b)修改字段名
输入要修改的字段名,通过获取字段名链队的队首指针Fieldf,然后依次向后遍历,找到要修改的字段,输入新的字段名,将其替换。
c)删除字段名
输入要删除的字段名,通过获取字段名链队的队首指针Fieldf,然后依次向后遍历,找到要删除的字段,将其从链队删除,然后调用更新函数删除所有记录的该字段的数据项。
d)添加记录
想输入要添加的记录,将其添加至记录链队的队尾,更新记录的数值。
e)修改记录
输入要修改记录的字段名和NUM_ID,若成功找到,输入新的修改值,修改完毕提示修改成功。
f)删除记录
输入删除的记录的NUM_ID,通过记录链队队首指针依次遍历,找到后从链队中删除该记录,更新记录条数的数值。
g)显示数据表
先依次显示字段名,然后遍历所有记录,将所有记录依次显示出来。
h)创建数据表
输入数据表的名字,然后调用添加字段的函数进行字段的添加,再调用记录添加函数添加记录,最后数据表创建完成。
(3).管理员登陆
从dba.txt读取管理员账户密码,然后用户输入,验证通过进入管理数据库界面,失败重新输入账号密码。
(4).文件存取
a)存储数据库
写文件用到了ofstream类,首先将管理用账户和密码通过“fout< 然后根据每一个数据库名创建一个”database_name.txt”的文件,将表一个一个的存入该文件。 对表的存储定义如下: 数据库名字段个数记录条数 字段1的类型字段2的类型…… 字段1名字字段2名字.. 记录1… 纪录2… 如图所示: 图3-4-a b)读取数据库 读文件用到ifstream类,由于存储格式已经定义好,既按存储相反的过程将读取的数据转换成数据库和数据表,然后再程序中进行对数据库表的操作。 三、个人完成的主要内容及问题分析 由于本人编程功底较好,所以就独自承担了编码的任务。 在之前的讨论和设计中,大家共同确定了此次课题设计的思路和程序的分块,准备工作做得比较充足,因此编码上遇到的磕绊比较少,然后一起4个人分别对程序进行测试,尽可能的修改了程序的BUG,优化了程序的使用性,完美的达到了课题设计的要求。 所遇到的问题: 1.对数据表结构的设计 2.数据表的操作 3.文件存取 对于第一问题,首先考虑到数据表是一张二维关系表,因此要将其从二个维度上进行拆分。 第一个维度是字段,第二个维度是记录,所以我们采用了两个链队,一个字段链队,一个记录链队,从而把数据与数据之间的联系建立了起来,形成了一张完整的并易操作的数据表。 对于第二个问题,由于表结构设计好了,而且主要运用指针链队的方式连接数据,所以增删改的操作都是与链队有关的操作,这个在数据结构中就掌握得很好了,但对于表的操作设计到很多细节的东西,所以这部设计一定要考虑周到,起初我们也没有想得很仔细,所以我在编码的时候这一部分调试的比较多,而且最后一期测试也能找出问题,但基本都已修改完善。 对于第三个问题,分为两个方面。 第一个是使用何种输入输出方式,第二个是怎样的定义怎样的存取格式。 前者我们选择了ifstream和ofstream类,该类简单易用,完全符合我们此次课题设计的要求。 后者我们自己确定了一种存取方案,在上文中提过,因此不再赘述。 通过两个方面的共同完善,很好得完成了数据存取的功能,这也是一个值得我们组骄傲的地方,相对其他题,这个存取还是有点意思的。 四、运行结果 1.登录 2.数据库管理界面 3.数据库操作界面 4.数据表操作界面 5.范例演示 创建CBD数据库 创建表名C字段名EmployeeNameDPBOSS的表 向其添加纪录,并创建成功 再向其添加纪录 删除记录2 退出程序,数据保存在CDB.txt文件中 五、个人总结 通过此次试验,为这学期学得C++课程做了一个完整的收尾。 之前学习过C语言、数据结构和JAVA,所以对于C++的学习可以轻车熟路的很快得掌握。 平时上课认证听讲和每次完成的上机作业也为最后的大作业做了很好的准备。 理解了面向对象的核心思想,封装、继承和多态。 然后通过学习程序的规则和多加练习,就能较好的掌握C++的编程,然后可以利用编程语言来解决实际遇到的问题。 在大作业选题的时候,由于之前和几个同学约好了做同一题,恰巧选题当天之前想选的题目没选到,就选择了这个DataBase类的设计。 乍看一眼没觉得多难,但我们几个人一起想的时候发现在设计上还是有些值得多加考虑的地方。 比如如何设计数据表,如何进行存储。 然后再讨论完设计,我自己在编码上遇到了许多繁琐细节的问题要解决,因此期间的调试也花掉一大部分时间。 不过这恰好锻炼了我编程的耐心和发现问题的能力。 做了许多次设计后觉得一开始的概要设计才是最重要的,它为一个程序构建了框架。 一个框架的完整健壮会为编码和后续的测试减少很多不必要的问题,也提高了整个设计过程效率。 然后小组的四个人共同去测试,能发现一个人发现不了的许多小BUG,这样程序也能修改的更加完好。 结合这学期所学的一点软件工程的知识,使得我们从此次设计中学到的东西比单纯的编程更有意义。 一种程序语言只是一种思想和规则的融合,这是我对程序设计语言的理解。 我相信通过此次C++的学习,会对我以后深入学习C++或者学习其他语言有很大的帮助,我也会更加深入的学习程序语言,以至于用其来解决更多的问题。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 作业