




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计 课程名称 C+课程设计题目名称 图书管理系统 2016 年 6 月 29 日目录一设计内容与要求3二设计思路:3三关键模块实现及主要代码3四实验结果及分析3五、心得体会3六、参考文献3一设计内容与要求(1)、设计一个图书管理系统,能够实现用户信息管理,图书信息的录入、查询、删除等功能。(2)、实现用户管理,系统具有用户注册功能。管理员的账号和密码由系统指定,登录后可进行修改。一般用户注册后才能登录使用系统。管理员具有录入、查询、删除图书信息及一般用户的功能。一般用户只有图书查询功能。 (3)、登录功能,只有注册了的用户才能进入系统,没有注册的则有提示信息出现。(4)、图书管理功能,管理员能够录入、查询、删除图书信息。(5)、图书查询功能,管理员及一般用户能够通过图书的基本信息,如图书作者、书名、出版社、出版日期等等,进行查询。提示:上述为基本功能,可参考实际的系统进行扩展。二设计思路:为了实现用户信息以及图书信息的管理,建立一个用户CUser类与图书信息CBoodata类,其中CUser类应该包含用户账号以及密码,CBookdata类应该包含图书作者,书名,出版社,出版日期。同时应该建立两个dat文件,一个为存储用户信息,一个用来储存图书信息。程序主要分为4个页面:(1) 登录页面,由Cdialog类派生出CMyprojectDlg类,用来处理账号注册与用户登录。(2) 图书查询页面。由Cdialog类派生出CSearch类。包含读取所有图书数据响应函数,以及根据作者姓名或者书名来查询图书响应函数。(3) 管理员图书管理页面。由Cdialog类派生出CBookdata类。包含读取所有图书响应函数,添加图书响应函数,修改图书响应函数,删除图书响应函数。(4) 用户信息管理页面,由Cdialog类派生出CUserdata类。包含读取所有用户信息响应函数,删除用户响应函数、添加用户响应函数、修改用户信息响应函数。因为本人能力有限,而且自己是根据老师给的教程以及结合书本内容来完成课程设计,于是我第一想到的就是应数组来存储信息,而不是用链表,所以,对于文件数据的删除与修改,难免会过于乏力。 三关键模块实现及主要代码(1)自己建立的类1.用户类:class CUserpublic:int num;char password20;2.图书信息类:class Book /图书类public: char author10; /设置作者姓名char bname20; /设置图书书名char pub_name20; /设置出版社名称int pub_date; /设置出版年月;(2)登录页面,由Cdialog类派生出CMyprojectDlg类,用来处理账号注册与用户登录。1.用户注册处理响应函数:void CMyprojectDlg:OnButton3() /用户注册/ TODO: Add your control notification handler code here /以下代码主要还是把这条记录写入文件,注意写入的格式:文件的前四个字节是保持用户记录数,/后面依次保持用户记录注意,写用户的每个信息的顺序要与读取时的顺序一致。 UpdateData(TRUE);CUser user;int n_user=0; /用户的个数,管理员默认为第一个。自己输入为账号:1111,密码:0000。int size=0;fstream file(user.dat,ios:in|ios:out); / 建立一个文件类,关于其用法,请baidu。file.seekg(ios:beg); /将文件指针指向文件头。file.read(char*)&n_user,sizeof(n_user); /读取用户数。 n_user+=1;file.seekp(ios:beg);file.write(char*)&n_user,sizeof(n_user);/写学生记录个数user.num=m_num; /之前定义user.password为string,导致密码匹配时有错误。memcpy(user.password,m_password.GetBuffer(m_password.GetLength(),m_password.GetLength(); / 把类CString对象的内容赋值到字符数组中user.passwordm_password.GetLength()=0; /在数组末尾加结束符号/在文件末尾,把新的记录写入。file.seekp(4+(n_user-1)*sizeof(CUser),ios:beg); /这里出错file.write(char*)&user.num,sizeof(user.num);file.write(char*)&user.password,sizeof(user.password); file.close();/用消息框提示CString str;str.Format(成功注册,成为第 %d 个注册用户,请按确定返回重新登录.,n_user-1); /因为第一个为管理员,不算为用户人数。AfxMessageBox(str);2.用户登录处理响应函数。其中包含判断是管理员,还是普通用户。void CMyprojectDlg:OnButton2() /用户登录/ TODO: Add your control notification handler code here UpdateData(TRUE); CUser m_user100;int i;int size;int n_user=0; /文件中用户的个数/读取文件中的用户记录,注意读取顺序与写入的顺序要一致,文件最开始的4个字节是表示记录个数。/根据记录个数,依次读取用户记录 放在成员变量m_st数组中(已在类体中声明了) CFile file;file.Open(user.dat,CFile:modeReadWrite);size=GetFileSize(void*)file.m_hFile,NULL); /读取文件大小,size=0表示是空文件if(size0)file.SeekToBegin();file.Read(&n_user,sizeof(n_user);if(n_user0 & n_user99) /实验中限定为0100个用户记录for( i=0;in_user;i+) /请注意与写入数据的顺序要保持一样,否则会读错数据。file.Read(&(m_useri.num),sizeof(m_useri.num);file.Read(&(m_useri.password),sizeof(m_useri.password);file.Close();/if(m_num=1111&m_password=0000) /管理员进入管理员页面 CAdministrators administrators; administrators.DoModal();CString str_password;for(i=0;i0)file.SeekToBegin();file.Read(&n_book,sizeof(n_book);if(n_book0 & n_book99) /实验中限定为0100个书本记录m_num_book=n_book;for( i=0;in_book;i+) /请注意与写入数据的顺序要保持一样,否则会读错数据。file.Read(&(m_user_booki.author),sizeof(m_user_booki.author);file.Read(&(m_user_booki.bname),sizeof(m_user_booki.bname);file.Read(&(m_user_booki.pub_name),sizeof(m_user_booki.pub_name);file.Read(&(m_user_booki.pub_date),sizeof(m_user_booki.pub_date);file.Close();/在列表控件中显示所有条记录/插入每列的表头;m_list.InsertColumn(0,作者,LVCFMT_LEFT,100,1); m_list.InsertColumn(1,书名,LVCFMT_LEFT,100,1);m_list.InsertColumn(2,出版社,LVCFMT_LEFT,100,1);m_list.InsertColumn(3,出版日期,LVCFMT_LEFT,100,1);/每一行插入一条书本记录for(i=0;in_book;i+)CString str;str=m_user_booki.author;m_list.InsertItem(i,str); /InsertItem向CListCtr控件申请一行用来存放数据,同时写入一行的头名称(即编号为0列的数据)str=m_user_booki.bname;m_list.SetItemText(i,1,str);/设置第i行第1列的的数据为书名str=m_user_booki.pub_name;m_list.SetItemText(i,2,str);/设置第i行第2列的的数据为出版社str.Format(%d,m_user_booki.pub_date); /整型变为字符串,便于在控件显示m_list.SetItemText(i,3,str);/设置第i行第3列的的数据为出版日期2.图书查询响应函数。void CSearch:OnButton4() /查询图书/ TODO: Add your control notification handler code here UpdateData(TRUE);m_list.DeleteAllItems();int num=0; /表示查找结果的个数int i; for(i=0;i=0, 表示str中包含了m_author的字段str=m_user_booki.bname;ret2=str.Find(m_bname,0); /ret2=0, 表示str中包含了m_bname的字段if(ret1=0) /按作者查询str=m_user_booki.author;m_list.InsertItem(num,str); /InsertItem向CListCtr控件申请一行用来存放数据,同时写入一行的头名称(即编号为0列的数据)str=m_user_booki.bname;m_list.SetItemText(num,1,str);/设置第i行第1列的的数据为书名str=m_user_booki.pub_name;m_list.SetItemText(num,2,str);/设置第i行第2列的的数据为出版社str.Format(%d,m_user_booki.pub_date); /整型变为字符串,便于在控件显示m_list.SetItemText(num,3,str);/设置第i行第3列的的数据为出版日期num+=1; /结果+1; (4)管理员图书管理页面。包含读取所有图书,添加图书,修改图书,删除图书的功能。1.读取所有图书功能实现与(3)的实现一样。2.添加图书响应函数。void CBookdata:OnButton7() /添加图书UpdateData(TRUE);Book book;int n_book=0; /书本的个数int size=0;fstream file(book.dat,ios:in|ios:out); / 建立一个文件类,关于其用法,请baidu。file.seekg(ios:beg); /将文件指针指向文件头。file.read(char*)&n_book,sizeof(n_book); /读取书籍数。/以下代码主要还是把这条记录写入文件,注意写入的格式:文件的前四个字节是保持书本记录数,/后面依次保持书本记录注意,写学生的每个信息的顺序要与读取时的顺序一致。 n_book+=1;file.seekp(ios:beg);file.write(char*)&n_book,sizeof(n_book);/写学生记录个数memcpy(book.author,m_add_author.GetBuffer(m_add_author.GetLength(),m_add_author.GetLength(); / 把类CString对象的内容赋值到字符数组中book.authorm_add_author.GetLength()=0; /在数组末尾加结束符号memcpy(book.bname,m_add_bname.GetBuffer(m_add_bname.GetLength(),m_add_bname.GetLength(); / 把类CString对象的内容赋值到字符数组中book.bnamem_add_bname.GetLength()=0; /在数组末尾加结束符号memcpy(book.pub_name,m_add_pub_name.GetBuffer(m_add_pub_name.GetLength(),m_add_pub_name.GetLength(); / 把类CString对象的内容赋值到字符数组中book.pub_namem_add_pub_name.GetLength()=0; /在数组末尾加结束符号book.pub_date=m_add_pub_date;/在文件末尾,把新的记录写入。file.seekp(4+(n_book-1)*54,ios:beg); file.write(char*)&book.author,sizeof(book.author);file.write(char*)&book.bname,sizeof(book.bname);file.write(char*)&book.pub_name,sizeof(book.pub_name);file.write(char*)&book.pub_date,sizeof(book.pub_date);file.close();/用消息框提示CString str;str.Format(文件中已有 %d 本书籍记录.,n_book);AfxMessageBox(str);3.修改图书响应函数。void CBookdata:OnButton5() /修改图书,必须先读取图书才能修改图书。/ TODO: Add your control notification handler code hereUpdateData(TRUE);m_list.DeleteAllItems();m_list.InsertColumn(0,作者,LVCFMT_LEFT,100,1); m_list.InsertColumn(1,书名,LVCFMT_LEFT,100,1);m_list.InsertColumn(2,出版社,LVCFMT_LEFT,100,1);m_list.InsertColumn(3,出版日期,LVCFMT_LEFT,100,1); CString str_author,str_bname,str_pub_name,str; /将book类的字符串数组赋值为字符串变量,方便比较。 CFile file; / 建立一个文件类,关于其用法,请baidu。 file.Open(book.dat,CFile:modeReadWrite); /打开文件file.SeekToBegin(); file.Write(&m_num_book,sizeof(m_num_book);/写书本记录本数 for(int i=0;im_num_book;i+) str_author=m_booki.author; str_bname=m_booki.bname; str_pub_name=m_booki.pub_name; if(str_author=m_author|str_bname=m_bname|str_pub_name=m_pub_name|m_booki.pub_date=m_pub_date) memcpy(m_booki.author,m_modify_author.GetBuffer(m_modify_author.GetLength(),m_modify_author.GetLength(); / 把类CString对象的内容赋值到字符数组中 m_booki.authorm_modify_author.GetLength()=0; /在数组末尾加结束符号memcpy(m_booki.bname,m_modify_bname.GetBuffer(m_modify_bname.GetLength(),m_modify_bname.GetLength(); / 把类CString对象的内容赋值到字符数组中 m_booki.bnamem_modify_bname.GetLength()=0; /在数组末尾加结束符号memcpy(m_booki.pub_name,m_modify_pub_name.GetBuffer(m_modify_pub_name.GetLength(),m_modify_pub_name.GetLength(); / 把类CString对象的内容赋值到字符数组中 m_booki.pub_namem_modify_pub_name.GetLength()=0; /在数组末尾加结束符号 m_booki.pub_date=m_modify_pub_date; /以下代码主要还是把这条记录写入文件,注意写入的格式:文件的前四个字节是保持学生记录数,/后面依次保持学生记录注意,写学生的每个信息的顺序要与读取时的顺序一致。 file.Write(&m_booki.author,sizeof(m_booki.author); file.Write(&m_booki.bname,sizeof(m_booki.bname); file.Write(&m_booki.pub_name,sizeof(m_booki.pub_name); file.Write(&m_booki.pub_date,sizeof(m_booki.pub_date); /在列表控件中显示所有条记录 str=m_booki.author;m_list.InsertItem(i,str); /InsertItem向CListCtr控件申请一行用来存放数据,同时写入一行的头名称(即编号为0列的数据)str=m_booki.bname;m_list.SetItemText(i,1,str);/设置第i行第1列的的数据为书名str=m_booki.pub_name;m_list.SetItemText(i,2,str);/设置第i行第2列的的数据为出版社str.Format(%d,m_booki.pub_date); /整型变为字符串,便于在控件显示m_list.SetItemText(i,3,str);/设置第i行第3列的的数据为出版日期 file.Close(); /用消息框提示str.Format(成功修改书籍记录.);AfxMessageBox(str);4.删除图书响应函数。void CBookdata:OnButton6() /删除图书,读取了图书数据后才能删除图书/ TODO: Add your control notification handler code hereUpdateData(TRUE);m_list.DeleteAllItems();m_list.InsertColumn(0,作者,LVCFMT_LEFT,100,1); m_list.InsertColumn(1,书名,LVCFMT_LEFT,100,1);m_list.InsertColumn(2,出版社,LVCFMT_LEFT,100,1);m_list.InsertColumn(3,出版日期,LVCFMT_LEFT,100,1);CString str_author,str_bname,str_pub_name,str; /将book类的字符串数组赋值为字符串变量,方便比较。int n_book,n_flag=0; / n_flag为删除标志,1为有元素删除了 CFile file; / 建立一个文件类,关于其用法,请baidu。 file.Open(book.dat,CFile:modeReadWrite); /新建一个文件并且打开文件file.SeekToBegin(); file.Write(&m_num_book,sizeof(m_num_book);/写书本记录本数,先填入本来的书本数。 for(int i=0;im_num_book;i+) str_author=m_booki.author; str_bname=m_booki.bname; str_pub_name=m_booki.pub_name; if(str_author=m_del_author|str_bname=m_del_bname|str_pub_name=m_del_pub_name|m_booki.pub_date=m_del_pub_date) n_flag=1; /删除标志置1 i+=1; /第i个元素为要删除元素,跳过 /以下代码主要还是把这条记录写入文件,注意写入的格式:文件的前四个字节是保持学生记录数,/后面依次保持学生记录注意,写学生的每个信息的顺序要与读取时的顺序一致。 file.Write(&m_booki.author,sizeof(m_booki.author); file.Write(&m_booki.bname,sizeof(m_booki.bname); file.Write(&m_booki.pub_name,sizeof(m_booki.pub_name); file.Write(&m_booki.pub_date,sizeof(m_booki.pub_date); if(n_flag=1)n_book=m_num_book-1; /表示删除了一本书,则将文件的书本数减1。 file.SeekToBegin(); file.Write(&n_book,sizeof(n_book);/写书本记录本数,先填入本来的书本数。 /用消息框提示 str.Format(成功删除书籍记录.); AfxMessageBox(str);else /用消息框提示 str.Format(没有这一本书的记录,不能删除.); AfxMessageBox(str); file.Close();(5)、用户信息管理页面,包含读取所有用户信息,删除、添加、修改用户信息。1.读取所有用户信息以(4)基本相同。2.删除用户信息实现基本方法与(4)基本相同。3.添加用户信息实现基本方法与(4)基本相同。4.修改用户信息实现基本方法与(4)基本相同。四实验结果及分析(1.)登录页面成功注册普通用户成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 西安外国语大学《服装工业样板》2023-2024学年第二学期期末试卷
- 天津城市职业学院《电机原理与电机拖动》2023-2024学年第二学期期末试卷
- 河南机电职业学院《工程伦理1》2023-2024学年第二学期期末试卷
- 新疆司法警官职业学院《中学教案分析实践》2023-2024学年第二学期期末试卷
- 山东电力高等专科学校《高分子基础》2023-2024学年第二学期期末试卷
- 长沙文创艺术职业学院《经济法实务》2023-2024学年第二学期期末试卷
- 湖南高尔夫旅游职业学院《化工原理(一)》2023-2024学年第二学期期末试卷
- 深圳信息职业技术学院《现代大地测量学》2023-2024学年第二学期期末试卷
- 江西卫生职业学院《硬件描述语言与数字系统设计》2023-2024学年第二学期期末试卷
- 东莞城市学院《单片机课程设计》2023-2024学年第二学期期末试卷
- DZ∕T 0221-2006 崩塌、滑坡、泥石流监测规范(正式版)
- 医学检验项目管理制度
- DBJ-T 15-98-2019 建筑施工承插型套扣式钢管脚手架安全技术规程
- 鸢飞鱼跃:〈四书〉经典导读智慧树知到期末考试答案章节答案2024年四川大学
- MOOC 统计学-南京审计大学 中国大学慕课答案
- 高考作文标准方格纸-A4-可直接打印
- 《陆上风电场工程设计概算编制规定及费用标准》(NB-T 31011-2019)
- 毛泽东诗词鉴赏
- 肛肠科的中医特色护理【医院中医护理及保健知识】
- 《高温熔融金属吊运安全规程》(AQ7011-2018)
- 商场纠纷和解书
评论
0/150
提交评论