当前位置:首页> 管理系统> VC60图书管理系统课程设计自救指南

VC60图书管理系统课程设计自救指南

老师布置了VC6.0图书管理系统课程设计,可你翻开课本发现连MFC的类都分不清,菜单资源、对话框、数据库连接全是一团浆糊。别急着放弃,这门课设没你想的那么高不可攀,用三天时间按正确路径走,至少能交出一个能运行、能演示、代码能讲清楚的成品。

先搞清楚课程设计到底要什么。大多数老师要的是一个基于对话框的Windows程序,用C++和MFC写一个能增删改查图书信息的界面,通常还会要求借书还书功能,数据存到Access或SQLite里。核心不是让你写出多优雅的架构,而是验证你理解了消息映射、控件绑定、数据库操作这三件事。所以第一步,别去啃那本六百页的VC教程,直接打开Visual C++ 6.0,新建一个MFC AppWizard项目,选择“基于对话框”的应用程序,其他选项全部默认。这一步你不需要懂代码,只要会点“完成”就行。

接下来最痛苦的是看到自动生成的代码。你的对话框类叫CBookDlg,里面有一堆OnInitDialog、OnPaint之类的函数。别慌,把ClassWizard打开,这是你的救命工具。在资源视图中双击你添加的按钮,系统会自动生成一个OnBnClickedAdd之类的函数,你只需要在这个函数里写自己的逻辑。这里的核心逻辑就是拿到编辑框里的内容,存到数据库里。

现在解决数据库。如果你没有装Access,可以下载一个SQLite的ODBC驱动,或者更简单,用文本文件模拟存储。但老师如果明确要求数据库,还是用Access吧。在MFC里连接Access只需要一句话:打开“查看->建立类向导->Member Variables”,为你的对话框添加一个MySql类成员,然后在StdAfx.h里包含ado头文件,用CString连接字符串指向你放在项目目录下的book.mdb文件。实际操作时,你在OnInitDialog里加上以下代码:

CoInitialize(NULL);
  _ConnectionPtr pConn;
  pConn.CreateInstance(__uuidof(Connection));
  pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=book.mdb","","",adConnectUnspecified);

这段代码能跑通,数据库就打通了一半。注意book.mdb要提前用Access建好,里面只要有一张book表,字段包括id(自动编号)、书名、作者、出版社、库存数量。至于借书还书,你可以再加一张borrow表。

但如果你连Access都装不上,有一个捷径:用CFile类操作一个结构体数组。在全局定义struct Book{char name[50]; char author[20]; int num;}; 然后把数组写入文件。这种做法虽然土,但对付一些只查运行效果不深究实现方式的老师足够。你只需要在增加按钮里把编辑框内容填进结构体,然后用CFile的Write函数追加到文件,列表控件刷新时用Read函数读出来。这个方案不用学ADO,代码量小,出错率低。

真正容易卡住的是列表控件显示数据。你在资源编辑器里放一个List Control控件,在ClassWizard中给它关联一个成员变量m_list,然后在OnInitDialog里设置列表的列:

m_list.InsertColumn(0,"书名",LVCFMT_LEFT,100);
  m_list.InsertColumn(1,"作者",LVCFMT_LEFT,80);
  m_list.InsertColumn(2,"库存",LVCFMT_LEFT,50);

每添加一条数据,就用m_list.InsertItem(行号, 书名)和m_list.SetItemText(行号,1,作者)把内容填进去。这个操作像填表格,先加一行,再往格子里按列写值。循环遍历你的记录集或者数组,就能实现刷新显示。

借书还书功能别想复杂了。借书就是先判断库存大于0,然后减一,同时往借阅记录表里加一行,还书就加一。你不需要做日期计算,不需要做超期罚款,那些是加分项,但基础分你只要完成数据更新即可。把这部分逻辑写在两个按钮的响应函数里,更新数据库和刷新列表。

最后一步也是最关键的一步,演示和答辩。不会写代码不代表你不会讲。你要背下几个关键函数的用法:OnInitDialog(初始化界面)、OnBnClickedAdd(增加按钮响应)、OnBnClickedDelete(删除按钮响应)、CString的Format函数把数字转成字符串。老师问你怎么实现查询的,你就说“我用了SQL语句,比如SELECT * FROM book WHERE 书名 LIKE ''%输入%''”。问你怎么连数据库的,就背前面那三行ADO代码。问你怎么处理并发冲突,你就说“因为课程设计是单机版,不考虑多人同时操作”。这些回答足以应付百分之八十的提问。

如果你连编译都过不了,大概率是字符集问题。VC6.0默认ANSI,如果编辑框里输入中文出现乱码,在项目设置中把“使用Unicode字符集”改成“使用多字节字符集”。如果出现无法解析的外部符号,多半是类向导生成的函数名和资源ID对不上,删除按钮和响应函数重新建立一次即可。

不要尝试从网上下一个完整源码改个名字交差,老师只要你打开代码问一句“你把外部变量定义在哪儿了”你就露馅。但你可以参考源码的界面布局和逻辑流程,自己动手把数据存储部分简化成文件读写,把界面里的按钮只保留五个:添加、删除、查询、借书、还书。工具栏和状态栏一概不加,对话框尺寸固定,颜色用默认的灰色。这样反而显得代码风格统一,项目结构简单明了。

时间分配上,第一天搭建界面和文件读写,第二天实现增删改查和列表刷新,第三天测试和背话术。每一步都别追求完美,比如文件读写时不考虑溢出,列表刷新时先DeleteAllItems再重新InsertItem,虽然效率低但稳定。你要知道,绝大多数老师评审课程设计看的是“能运行、能演示、能解释”,不是看你用了多少个设计模式和高级特性。

当你在演示时按下按钮看到数据出现在列表里,再点击借书库存数字减一,那种成就感会骗过你自己。哪怕你心里清楚这些代码每一行都是照猫画虎,但那一刻你已经比班上十多个还在百度“VC6.0怎么新建工程”的人强了。课程设计不是考算法,是考流程。把流程走通,分数就到手了。

满贯体育 九游体育 九游体育 九游体育 九游体育 九游体育 九游体育 满贯体育 九游体育 满贯体育