




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科生课程设计课程名称: C+语言程序设计课程编号: 设计题目: 图书借阅管理系统姓 名:班 级: 学 号:院 系: 信息学院网络技术系实验地点: 指导教师: 成 绩:教师签字: 课程设计时间:2009.11.23至2009.12.03目 录1 系统设计总说明1.1设计目的31.2设计要求31.3设计内容41.4系统功能简介41.5设计平台42 C+语言课程设计报告2.1需求分析 2.1.1管理员功能5 2.1.2读者功能52.2概要设计 2.2.1整体设计6 2.2.2系统层次结构图7 2.2.3流程图(部分示例)72.3详细设计 2.3.1书籍结构体(Book)8 2.3.2书籍管理结构体(BookManage)8 2.3.3读者结构体(Reader)8 2.3.4读者管理结构体(ReaderManage)9 2.3.5菜单结构体(Menu)9 2.3.6主函数(main)92.4编码调试 2.4.1各界面菜单显示10 2.4.2登录验证13 2.4.3注册新读者用户13 2.4.4添加新的图书资料13 2.4.5修改已有图书资料13 2.4.6删除已有图书资料14 2.4.7查找已有图书资料14 2.4.8显示全部图书资料142.5参考文献142.6设计总结142.7附录:C+图书管理系统源代码15系统设计总说明1.1设计目的C/C+语言课程设计是信息管理与信息系统专业的重要实践性课程。课程设计为学生提供了一个手脑并用、独立实践的机会。目的在于培养学生分析问题和解决问题的能力,将课本的理论知识与实际应用问题进行有机结合,提高学生程序设计、程序调试及项目开发能力。 通过本课程设计的实践,全面总结C+课程学习中的数据类型、程序结构、数组、函数、指针、结构体等基本概念,掌握其使用方法。培养使用面向过程的程序设计方法编写计算机程序的能力。 课题的目的主要是考查学生对C/C+语言的综合编程能力的掌握,培养学生的分析问题和解决问题的能力及逻辑思维能力。该课题主要考察学生对函数、结构体,指针,文件等的操作,以及C/C+语言基本规则和算法的掌握,所以完成本颗题目要求学生较强的设计能力,特别是要具有综合应用能力。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。1.2设计要求问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做 什么(而不是怎么做),限制条件是什么。概要设计:对问题描述中涉及的操作对象定义相应结构体,并按照以设计需要为中心的原则,确定各个结构体之间的关系。逻辑设计的结果应写出每个结构体抽象数据结构体型的定义(包括数据 结构的描述和每个基本操作的功能说明)、各个主要模块的算法,并画出模块之间的调用 关系图。详细设计:定义相应的储存结构并写出各函数的伪码算法。在这个过程中,要综合考虑系 统功能,使得系统结构清晰、合理、简单和易于调试,数据类型的实现尽可能做到数据封 装,基本操作的规格说明尽可能做到明确具体。详细设计的结果写出数据成员储存结构的码类型定义,写出函数形式的算法框架。程序编码:把详细设计的结果进一步求精为程序设计语言程序,同时加入一些注解, 使程序中逻辑概念清楚。程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工 具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后, 认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果。结果分析:程序运行结果包括正确的输入及输出结果和含有错误的输入及其输出结果。1.3设计内容 设计一个小型图书借阅管理系统。1.4系统功能简介管理员功能 A.添加新的图书资料 B.修改已有图书资料 C.删除已有图书资料 D.查找已有图书资料 E.查看所有图书资料 F.修改读者用户信息 G.删除读者用户信息 H.查看所有读者信息读者功能 A.借阅新的图书 B.归还已借图书 C.查找所需图书 D.查看借阅情况1.5设计平台 本系统是在windows环境下开发的,使用软件为Microsoft公司的Visual C+ 6.0,并采用了面向过程的技术。C+语言课程设计报告信息管理与信息系统专业 200811622233 张媛媛 指导教师: 2.1需求分析 2.1.1管理员功能:登录:输入管理员密码,若密码错误则不得执行管理员操作。添加新书:增加新的图书资料,同时需检查新书的图书编号是否已存在于 原图书资料中,若已存在则应取消添加或提示重新输入。修改图书:通过编号查询该图书资料,若该编号存在,则显示已有信息, 允许修改,否则提示无该图书信息。删除图书:通过编号查询该图书资料,若该编号存在,则显示已有信息, 允许删除,否则提示无该图书信息。删除对象包括该图书资料 以及“图书状态”和“借阅人”中与此书相关的所有记录。查找图书: A.按书号查找:通过编号查询该图书资料,若该编号存在,则显示图书信 息,否则提示无该图书信息。 B.按书名查找:通过书名查询该图书资料,若该编号存在,则显示图书信 息,否则提示无该图书信息。 C.按作者查找:通过作者查询该图书资料,若该编号存在,则显示图书信 息,否则提示无该图书信息。查看全部图书:显示所有图书资料,包括书号、书名、作者、状态和借阅 人等信息。修改读者:通过姓名查询该读者信息,若该姓名存在,则显示已有信息, 允许修改,否则提示无该读者信息。删除读者:通过姓名查询该读者信息,若该姓名存在,则显示已有信息, 允许删除,否则提示无该读者信息。删除对象包括该读者姓名、 班级、电话以及“图书状态”和“借阅人”中与此人相关的所 有记录。查看所有读者:显示所有读者资料,包括姓名、班级、电话等信息。2.1.2读者功能:登录:输入读者姓名,若未经注册则不得进入读者服务界面。注册:新用户经注册方可登录系统并使用读者服务功能。借书: A.输入所需图书编号,判断该编号是否存在,若不存在则提示重新输入。 B.若所输入图书编号存在,则判断该书籍是否已被借出,若已借则不允 许执行借书操作。 C.若所输入图书未借,则提示输入读者姓名,判断所输入读者姓名是否 存在,若不存在则提示重新输入。 D.若读者姓名存在,则允许执行借书操作。 E.借书处理包括在“图书状态”中加上“已借”标记。还书: A.输入所借书编号,判断该编号是否存在,若不存在则提示重新输入。 B.判断该书是否已借出,若未借则不允许执行还书操作。 C.借书处理包括在“图书状态”中加上“未借”标记。查询图书: A.按书号查找:通过编号查询该图书资料,若该编号存在,则显示图书信 息,否则提示无该图书信息。 B.按书名查找:通过书名查询该图书资料,若该编号存在,则显示图书信 息,否则提示无该图书信息。 C.按作者查找:通过作者查询该图书资料,若该编号存在,则显示图书信 息,否则提示无该图书信息。查看借阅情况:输入读者姓名,若该姓名不存在则提示重新输入,若该姓 名存在则显示该读者借阅信息。 2.2概要设计2.2.1整体设计经过需求分析,本系统共设计了五个大模块,分别是书籍数据维护模块、书籍管理模块、读者数据维护模块、读者管理模块和菜单模块。接着相应定义了五个结构体,分别是书籍结构体(Book)、书籍管理结构体(BookManage)、读者结构体(Reader)、读者管理结构体(ReaderManage)和菜单结构体(Menu)。书籍结构体(Book)的功能在于存放和维护书籍的基本信息,包括书号、书名、作者、状态(已借/在架)和借阅人;书籍管理结构体(BookManage)的功能在于实现对书籍的相关操作,包括读取书籍文档文件(book.txt)、保存书籍文档文件、添加图书、修改图书、删除图书、显示全部图书和查找图书;读者结构体(Reader)的功能在于存放和维护读者的基本信息,包括姓名、班级和电话;读者管理结构体(ReaderManage)的功能在于实现对读者的相关操作,包括读取读者文档文件(reader.txt)、保存读者文档文件、新读者注册、修改读者、删除读者、显示全部读者和查找读者;菜单结构体(Menu)的功能在于实现各界面的引导工作,包括主登录界面、系统管理界面、读者登录界面、读者服务界面、管理员书籍查找界面和读者书籍查找界面。2.2.2系统层次结构图 2.2.3流程图(部分示例) 管理员登录 读者登录 读者借阅图书 管理员或读者按书名查找图书 2.3详细设计2.3.1书籍结构体(Book)私有数据 char bnum10; /书号 char bname20; /书名 char bauthor10; /作者 char rname10; /借阅人公有数据及公有函数 int tag; /状态标记判断指标(已借/在架) Book() /构造函数初始化信息 void set_bnum(char *no) /设置书号 char *get_bnum() /获得书号 void set_bname(char *n) /设置书名 char *get_bname() /获得书名 void set_bauthor(char *a) /设置作者 char * get_bauthor() /获得作者姓名 void set_tag(int t) /状态设置 void set_rname(char *rn) /设置借阅人 char *get_rname() /获得借阅人姓名 void show_tag() /显示图书状态 void copy(Book m) /Book结构体copy函数 2.3.2书籍管理结构体(BookManage)私有数据及函数 Book books100; /定义Book书籍结构体数组对象,最大容量100本int length; /计数void saveFile() /保存书籍文件void readFile() /读取书籍文件 公有数据及函数 BookManage() /构造函数,读取磁盘文件 BookManage() /析构函数,保存磁盘文件 bool add(Book book) /添加图书资料int bnu_search(char *bnu) /按书号查找书籍 int bna_search(char *bna) /按书名查找书籍 int bau_search(char *bau) /按作者查找书籍 int rn_search(char *rn) /按借阅人查找书籍 void revise(Book book,int i)/带参的修改书籍函数 void deleteBook(int index)/带参的删除书籍资料函数void show_book()/不带参的显示书籍函数 void show_book(int i)/带参的显示书籍函数 void br_book()/读者借、还书功能函数 bool in(int i) /判断图书是否在架函数 2.3.3读者结构体(Reader)私有数据及函数 char rname10; /读者姓名 char rclass10; /班级 char rtel10; /电话公有数据及函数 Reader() /构造函数,实现数据初始化 void set_rname(char *rn) /设置读者姓名 char * get_rname() /获得读者姓名 void set_rclass(char *rc) /设置班级 char *get_rclass() /获得班级 void set_rtel(char *rt) /设置电话 char *get_rtel() /获得电话 void copy(Reader m) /读者Reader结构体copy函数2.3.4读者管理结构体(ReaderManage)私有数据及函数Reader readers50; /定义读者结构体数组对象,最多50位int length; /计数 void readFile() /读取读者文件函数void saveFile() /保存读者文件公有数据及函数 ReaderManage() /构造函数,读取读者文件ReaderManage() /析构函数,保存读者文件 void add_reader(Reader r) /添加读者用户函数int search(char *rn) /按姓名查找读者函数bool revise(Reader reader,int i) /修改读者资料函数 void delete_reader(int index) /删除读者函数 bool log_reader(Reader r) /登录时判断读者用户是否存在函数 void reg_reader() /注册用户函数void show_reader() /不带参的显示读者信息函数 void show_reader(int i) /带参的显示读者信息函数2.3.5菜单结构体(Menu)私有数据及函数BookManage bm; /定义书籍管理结构体对象bmReaderManage rm; /定义读者管理结构体对象rmReader r; /定义读者结构体对象rint choice; /菜单序号选择 int key; /管理员密码公有数据及函数void header() /页眉void log_menu() /主界面登录菜单void admin_menu() /管理员管理菜单void reader_menu() /读者服务菜单void bsearch_menu() /读者查找书籍菜单 void absearch_menu() /管理员查找书籍菜单 void reader_lr() /读者登录或注册菜单void log_admin() /管理员登录void rn_search() /按书号查找函数 void bnu_search() /按书号查找函数 void bna_search() /按书名查找函数 void bau_search() /按作者查找函数 void addBook() /新增书籍函数void reviseBook() /修改书籍函数 void delBook() /删除书籍函数 void reviseReader()/修改读者用户函数 void delReader() /删除读者用户函数 2.3.6主函数(main) int main()2.4编码调试、测试2.4.1各界面菜单显示主登录界面 系统管理界面读者登录界面读者服务界面书籍查找界面 2.4.2登录验证管理员登录A. 输入错误密码 B.输入正确密码 读者登录A. 输入已注册姓名 B.输入未注册姓名 2.4.3注册新读者用户 2.4.4添加新的图书资料输入已存在图书书号 输入未存在图书书号 2.4.5 修改已有图书资料输入不存在图书书号 输入已存在图书书号2.4.6删除已有图书资料输入不存在图书书号 输入已存在图书书号 2.4.7查找已有图书资料(以按书号查找为例)输入不存在图书书号 输入已存在图书书号 2.4.8显示所有图书资料2.5参考文献1. MS-DOS命令大全帮助文件/落雪飞花;网络资料2. C+函数库参考帮助文件;刘双印老师提供3. C+基础教程-从问题分析到程序设计专著(美)D. S. Malik著;清华大学出版社2.6设计总结经过近一个星期的努力,前后修修改改,调试又调试,我的C+图书管理系统终于得以诞生!在这个过程中,我发现自己还有很多很多知识都没有学好,看别人的例子的时候好像很简单,自己一上机操作就有问题。调试的时候系统总是报错,还有很多警告,每添加一个函数,往往都要要调试很久,有时候仅仅只是少了一个大括号,却花上近半个小时才找到问题的瓶颈所在。系统虽然完成了,也可以运行,一些基本的功能也能够实现,但我知道,还有很多的不足。另外,我发现帮助文件真的很有用,每当我看别人例子看不懂的时候,都是去帮助文件搜索,如果里面的信息不够完整,再利用各大网站的搜索引擎来寻找答案,比如更改背景颜色的问题,之前试了很多次都不行,后来偶然发现一个MS-DOS命令大全,然后再去网上搜索color命令的使用语法,原来以为很复杂的代码,只需一句system(color fd),问题就迎刃而解了。以后还会有很多课程设计,一定要吸取这次的教训,知识不是看过就可以了,而是要把知识学透、学精,才能够真正做到为我所用。2.6附录:C+图书管理系统源代码/姓名:张媛媛/班级:信管1082/学号:200811622233/*#include #include #include #include #include #define BookFile book.txt /将字符串BookFile替换原文件中的宏名称book#define ReaderFile reader.txtusing namespace std;/*读者结构体,用于存放读者基本信息*class Reader private: char rname10; char rclass10; char rtel10;public: Reader() /构造函数,实现数据初始化 strcpy(rname,);strcpy(rclass,);strcpy(rtel,); void set_rname(char *rn) /设置读者姓名 strcpy(rname,rn); /将rn的字符复制给rname char * get_rname() /获得读者姓名 return rname; /返回rname的值 void set_rclass(char *rc) /设置班级strcpy(rclass,rc); char *get_rclass() /获得班级return rclass; void set_rtel(char *rt) /设置电话strcpy(rtel,rt); char *get_rtel() /获得电话 return rtel; void copy(Reader m) /读者Reader结构体copy函数 strcpy(rname,m.get_rname();strcpy(rclass,m.get_rclass();strcpy(rtel,m.get_rtel();/*读者管理结构体,实现对读者用户的管理*class ReaderManage Reader readers50; /定义读者结构体数组对象,最多50位int length; void readFile() /读取读者文件函数ifstream fread; /定义输入文件流对象fread length=0; /计数 if(!fread)cout读取磁盘文件失败!endl;exit(1); fread.open(ReaderFile,ios:binary);/使文件流与文件关联,以二进制方式打开int i=0;while(fread.read(char *)&readersi,sizeof(Reader)/计算并返回所占字节数i+; length=i; fread.close();/关闭磁盘文件void saveFile() /保存读者文件ofstream fwrite; /定义输出文件流对象fwrite if(!fwrite)cout=50) cout对不起,注册人数已满!n;return ; readerslength.copy(r); /调用读者结构体copy函数 length+;int search(char *rn) /按姓名查找读者函数for(int i=0;ilength;i+)if(strcmp(readersi.get_rname(),rn)=0)/判断是否相等return i; return -1; bool revise(Reader reader,int i) /修改读者资料函数 readersi.copy(reader); /调用读者结构体cpoy函数return true;void delete_reader(int index) /删除读者函数 for(int i=index;ilength-1;i+)readersi.copy(readersi+1); /用后面的地址覆盖前面的地址 length-;bool log_reader(Reader r) /登录时判断读者用户是否存在函数 for(int i=0;ilength;i+) if(strcmp(readersi.get_rname(),r.get_rname()=0)return true;return false; void reg_reader() /注册用户函数char n10; /姓名namechar c10; /班级classchar t10; /电话tel Reader reader; coutn; coutc; coutt; reader.set_rname(n); /调用读者结构体设置读者姓名函数 reader.set_rclass(c); /调用读者结构体设置读者班级函数 reader.set_rtel(t); /调用读者结构体设置联系电话函数 add_reader(reader); /调用读者结构体添加读者函数coutnt注册成功!;void show_reader() /不带参的显示读者信息函数 coutn *读*者*信*息*列*表*nn; cout姓名ttt班级ttt电话n; for(int i=0;ilength;i+) coutreadersi.get_rname();couttttreadersi.get_rclass();couttttreadersi.get_rtel()n; void show_reader(int i) /带参的显示读者信息函数 coutn *读*者*信*息*列*表*nn; cout姓名ttt班级ttt电话n; coutreadersi.get_rname(); couttttreadersi.get_rclass(); couttttreadersi.get_rtel()n; ; /*书籍结构体,用于存放书籍基本信息*class Bookprivate: char bnum10; /书号 char bname20; /书名char bauthor10; /作者char rname10; /借阅人public:int tag; /状态标记判断指标(已借/在架)Book() /构造函数初始化信息 strcpy(bnum,);strcpy(bname,);strcpy(bauthor,);strcpy(rname,);tag=0; void set_bnum(char *no) /设置书号 strcpy(bnum,no); /把字符串no中的字符复制到字符串bnum中 char *get_bnum() /获得书号 return bnum; /返回值为bnum void set_bname(char *n) /设置书名 strcpy(bname,n); char *get_bname() /获得书名 return bname; void set_bauthor(char *a) /设置作者 strcpy(bauthor,a); char * get_bauthor() /获得作者姓名 return bauthor; void set_tag(int t) /状态设置 tag=t; void set_rname(char *rn) /设置借阅人 strcpy(rname,rn); char *get_rname() /获得借阅人姓名 return rname; void show_tag() /显示图书状态 if(tag=1) cout已借; else cout在架; void copy(Book m) /Book结构体copy函数 strcpy(bnum,m.get_bnum(); /将获得书号函数里的返回值里的字符复制到bnum strcpy(bname,m.get_bname(); strcpy(bauthor,m.get_bauthor(); tag=0; ;/*书籍管理结构体,实现管理书籍功能*class BookManageprivate: Book books100; /定义Book书籍结构体数组对象,最大容量100本int length; void saveFile() /保存书籍文件ofstream fwrite; /定义输出文件流ofstream结构体对象fwriteif(!fwrite)cout文件保存失败!n; exit(1); fwrite.open(BookFile,ios:binary);/使文件流与文件建立关联,以二进制方式打开fwrite.write(char *)books,length*sizeof(Book); /计算并返回所占字节数 fwrite.close(); /关闭磁盘文件void readFile() /读取书籍文件 ifstream fread; /定义输入文件流对象fread length=0; if(!fread)cout文件读取失败!=100) cout对不起,储存已满,您无法继续添加!n; return -1; else bookslength.copy(book); /调用书籍结构体copy函数 length+; return (length-1);int bnu_search(char *bnu) /按书号查找书籍 for(int i=0;ilength;i+) if(strcmp(booksi.get_bnum(),bnu)=0) /字符串比较,判断是否相等 return i; return -1; int bna_search(char *bna) /按书名查找书籍 for(int i=0;ilength;i+) if(strcmp(booksi.get_bname(),bna)=0) /判断 return i; return -1; int bau_search(char *bau) /按作者查找书籍 for(int i=0;ilength;i+) if(strcmp(booksi.get_bauthor(),bau)=0)/判断 return i; return -1; int rn_search(char *rn) /按借阅人查找书籍 for(int i=0;ilength;i+) if(strcmp(booksi.get_rname(),rn)=0)/判断 return i; return -1; void revise(Book book,int i)/带参的修改书籍函数 booksi.copy(book); /调用Book结构体copy函数void deleteBook(int index)/带参的删除书籍资料函数 for(int i=index;ilength-1;i+) booksi.copy(booksi+1);/用后面的地址将当
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 施工防护知识培训课件
- 跨行业市场调研报告模板数据驱动决策版
- 高职大学生与新质生产力培养
- 2025年股权转让及融资合同
- 中班下学期汇报课01
- 制度修订情况汇报
- 2025年新型互联网广告精准投放算法效果评估与用户行为分析报告
- 医院职工小家汇报材料
- 农业生产托管服务合同协议书
- 电网风险辨识培训课件
- 南航自动控制原理课件
- 胎盘早剥护理查房
- 脑梗死2025诊疗指南
- 耳前瘘管继发感染诊疗要点
- T-YNX 002-2025 葡萄组培脱毒快繁技术规程
- 衣服投标供货方案(3篇)
- 公司电脑补贴管理办法
- 中石化对供应商管理办法
- 2025版安全生产法全文
- 《山居秋暝》(王维)测试题带答案
- 甲状腺肿瘤的早期诊断与治疗进展
评论
0/150
提交评论