收藏 分销(赏)

C--个人书籍管理系统的设计与实现.doc

上传人:天**** 文档编号:3898158 上传时间:2024-07-23 格式:DOC 页数:22 大小:153KB 下载积分:10 金币
下载 相关 举报
C--个人书籍管理系统的设计与实现.doc_第1页
第1页 / 共22页
C--个人书籍管理系统的设计与实现.doc_第2页
第2页 / 共22页


点击查看更多>>
资源描述
数学与计算机学院 C程序设计 课程 设计报告 年级 2012 学号 2012110911 姓名 刘怡然 成绩 专业 电气 实验地点 B3-401 指导教师 许景山 实验项目 简单个人书籍管理系统的设计与实现 实验日期 2013年6月23日 一、 实验题目 简单个人书籍管理系统的设计与实现 二、 实验目的、要求 1、存储书籍各种相关信息。 2、提供查找功能,按照多种关键码查找需要的书籍,查找成功后可以修改记录的相关项。 3、提供排序功能,按照多种关键码对所有的书籍进行排序,例如按照购买日期进行排序。 4、其他辅助的维护工作。 三、 数据结构及算法描述 1、使用C++中的类来实现,其中有DATE类和Book类,进行类的复合。数据均为私有数据。 class DATE { public: friend ostream & operator<<(ostream &output, DATE &t); //友元函数重载流插入运算符 friend istream & operator>>(istream &input, DATE &t); //友元函数重载流提取运算符 public: DATE(int y=0,int m=0,int d=0); //初始化 virtual ~DATE(); DATE &operator=(DATE &); //重载时间等于运算符 int operator < (DATE &); //重载时间小于运算符 int operator ==(DATE &); //重载时间等于判断运算符 private: int year,month,day; }; ---------------------------------------------------------------------------------------------------------- class Book { public: Book(int t,char *n,char *a,float p,int y,int m,int d); Book(){}; virtual ~Book(); int f_new(); //新建书籍信息 int f_save(); //保存书籍信息 int f_open(); //打开书籍信息 int display(); //显示书籍信息 int e_delete(); //删除书籍信息 int e_update(); //修改书籍信息 int showInfo(); //显示个别书籍信息 int sort(); //排序书籍信息 Book &operator=(Book &); //重载等于运算符 private: int type; //书籍类型 char name[MAX]; //书籍名称 char author[MAX]; //作者 float price; //书籍价格 DATE date; //购买日期 }; 2、定义数组Book books[200]使用流提取、流插入方式进行数据读取和存储。 3、在排序函数int sort( )中使用冒泡算法排序: for(i=0;i<num-1;i++) { for(j=i+1;books[i].date<books[j].date||books[i].date==books[j].date;j++) { ex=books[i]; books[i]=books[j]; books[j]=ex; } } 四、程序流程图 程序整体的功能模块如下所示: main sort edit file display e_update e_delete f_save f_new f_open 各个功能模块的含义如下: 1、“主函数”模块main() 此模块循环显示第一级操作命令菜单,接收键盘输入的命令,检查命令是否合法,若合法则调用相应下层函数。命令菜单中包含“退出系统”命令,当接收到该命令时立即终止整个程序的运行。 2、“新建”模块f_new(): 此模块清空books数组;进入输入状态,接收键盘输入的全部数据保存在books数组中,按“购买日期”顺序输入记录。 3、“打开”模块f_open(): 此模块清除books数组中原有数据,从A盘上已经存在的数据文件(books.dat)中读入全部数据到books数组中,并将全部数据按读入顺序显示在屏幕上。 4、“保存”模块f_save(): 此模块将books数组中全部有效数据保存到A盘books.dat文件中。 5、“删除”模块e_delele(): 此模块接收从键盘输入的一条记录的“购买日期”和“书名”,在books数组中查找,如找到则从books数组中删除该记录,否则显示“未找到”。 6、“更新”模块e_update(): 此模块接收键盘输入的一条记录的“购买日期”和“书名”,在 books 数组中查找,如找到则显示该记录的原数据并提示键盘输入新数据用以替换原有数据,如未找到则显示“未找到”。 7、“显示”模块display(): 此模块显示类别名称和编号,提示用户输入类别编号,显示books数组中指定类别的书籍记录,或显示全部书籍记录。 8、“排序”模块sort(): 此模块对books数组中所有记录按“购买时间”排序。 五、源程序清单 文件 DATE.h:类DATE的定义 // DATE.h: interface for the DATE class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_DATE_H__6B5CFDD0_60A3_4347_853E_4B83FD47F383__INCLUDED_) #define AFX_DATE_H__6B5CFDD0_60A3_4347_853E_4B83FD47F383__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include <iostream.h> class DATE { public: friend ostream & operator<<(ostream &output, DATE &t); //友元函数重载流插入运算符 friend istream & operator>>(istream &input, DATE &t); //友元函数重载流提取运算符 public: DATE(int y=0,int m=0,int d=0); //初始化 virtual ~DATE(); DATE &operator=(DATE &); //重载时间等于运算符 int operator < (DATE &); //重载时间小于运算符 int operator ==(DATE &); //重载时间等于判断运算符 private: int year,month,day; }; #endif // !defined(AFX_DATE_H__6B5CFDD0_60A3_4347_853E_4B83FD47F383__INCLUDED_) ---------------------------------------------------------------------------------------------------------------------- DATE.cpp:类DATE的实现 // DATE.cpp: implementation of the DATE class. // ////////////////////////////////////////////////////////////////////// #include "DATE.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// DATE::DATE(int y,int m,int d) { year=y; month=m; day=d; } DATE::~DATE() { } ostream & operator<<(ostream &output, DATE &t) { if(t.month>0&&t.month<13&&t.day>0&&t.day<31) output<<t.year<<"-"<<t.month<<"-"<<t.day<<endl; else output<<"日期错误!"<<endl; return output; } istream & operator>>(istream &input, DATE &t) { input>>t.year>>t.month>>t.day; return input; } int DATE::operator <(DATE &operand) { if(year<operand.year) return 1; else if(year>operand.year) return 0; else if(month<operand.month) return 1; else if(month>operand.month) return 0; else if(day<operand.day) return 1; else return 0; } int DATE::operator ==(DATE &right) { if(year==right.year&&month==right.month&&day==right.day) return 1; else return 0; } DATE &DATE::operator =(DATE &right) { year=right.year; month=right.month; day=right.day; return *this; } ---------------------------------------------------------------------------------------------------------------------- Book.h:类Book的定义 // Book.h: interface for the Book class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_BOOK_H__0541F24F_979E_4421_8EAC_926616201FD9__INCLUDED_) #define AFX_BOOK_H__0541F24F_979E_4421_8EAC_926616201FD9__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include <string.h> #include "fstream.h" #include <stdio.h> #include <stdlib.h> #include <conio.h> #include "DATE.h" #define MAX 12 class Book { public: Book(int t,char *n,char *a,float p,int y,int m,int d); Book(){}; virtual ~Book(); int f_new(); //新建书籍信息 int f_save(); //保存书籍信息 int f_open(); //打开书籍信息 int display(); //显示书籍信息 int e_delete(); //删除书籍信息 int e_update(); //修改书籍信息 int showInfo(); //显示个别书籍信息 int sort(); //排序书籍信息 Book &operator=(Book &); //重载等于运算符 private: int type; //书籍类型 char name[MAX]; //书籍名称 char author[MAX]; //作者 float price; //书籍价格 DATE date; //购买日期 }; #endif // !defined(AFX_BOOK_H__0541F24F_979E_4421_8EAC_926616201FD9__INCLUDED_) ---------------------------------------------------------------------------------------------------------------------- Book.cpp:类Book的实现 // Book.cpp: implementation of the Book class. // ////////////////////////////////////////////////////////////////////// #include "Book.h" Book books[200]; //定义200条数组 int num=0; //初始化书籍信息条数零 ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// Book::Book(int t,char *n,char *a,float p,int y,int m,int d) :date(y,m,d) { type=t; price=p; strncpy(name,n,MAX); name[MAX]=0; strncpy(author,a,MAX); author[MAX]=0; } Book::~Book() { } int Book::f_new() { system("cls"); cout<<"1--学习"<<" "<<"2--名著"<<" "<<"3--小说"<<" "<<"4--散文"<<endl<<endl<<endl; cout<<"请输入书籍类型:";cin>>books[num].type; printf("请输入书名:");gets(books[num].name); printf("请输入作者名:");gets(books[num].author); cout<<"请输入书籍价格:";cin>>books[num].price; cout<<"请输入购买日期:";cin>>books[num].date; num++; return 1; } int Book::f_save() { ofstream outFile("book.dat",ios::out|ios::binary); if(!outFile) cerr<<"Open file or create file error."<<endl; else { outFile<<num; outFile.write((char *)&books,sizeof(books)); outFile.close(); cout<<"保存成功!"<<endl; } return 1; } int Book::f_open() { system("cls"); int i; ifstream infile("book.dat",ios::in|ios::binary); { infile>>num; if(num==0) { cout<<"没有记录!请先输入书籍信息。"<<endl; system("pause"); return 1; } for(i=0;i<num;i++) infile.read((char *)&books[i],sizeof(books)); infile.close(); } return 1; } int Book::sort() { char c; system("cls"); printf("\n---------------------------排序书籍信息-----------------------\n\n"); cout<<"1----------------按时间顺序排序"<<endl<<"2----------------按书名顺序排序"<<endl; c=getch(); switch(c) { case'1': system("cls"); int i,j;Book ex; printf("\n-------------------------时间顺序排序书籍信息---------------------\n\n"); for(i=0;i<num-1;i++) { for(j=i+1;books[i].date<books[j].date||books[i].date==books[j].date;j++) { ex=books[i]; books[i]=books[j]; books[j]=ex; } } for(i=0;i<num-1;i++) books[i].showInfo(); system("pause"); return 1; } return 1; } int Book::display() { char *s;char *s1="学习";char *s2="名著";char *s3="小说";char *s4="散文"; char c; for(;;) { system("cls"); cout<<"1. 显示全部书籍信息。"<<endl; cout<<"2. 显示指定类别书籍信息。"<<endl; cout<<"0. 返回上一层。"<<endl; c=getch(); if(c=='0') break; switch(c) { case'1': { system("cls"); printf("\n---------------------------全部书籍列表-----------------------\n\n"); printf("类型 书名 作者 价格 日期\n\n"); for(int i=0;i<num;i++) { switch(books[i].type) { case 1: s=new char[strlen(s1)+1]; strcpy(s,s1); break; case 2: s=new char[strlen(s2)+1]; strcpy(s,s2); break; case 3: s=new char[strlen(s3)+1]; strcpy(s,s3); break; case 4: s=new char[strlen(s4)+1]; strcpy(s,s4); break; } printf("%-15s%-18s%-15s%-15.1f",s,name,author,price);cout<<date<<endl; } } break; case'2': system("cls"); printf("\n---------------------------书籍分类列表-----------------------\n\n"); for(int i=0;i<num;i++) if(books[i].type==1) cout<<"学习类:"<<endl<<books[i].name<<" "<<books[i].author<<endl; for(i=0;i<num;i++) if(books[i].type==2) cout<<"名著类:"<<endl<<books[i].name<<" "<<books[i].author<<endl; for(i=0;i<num;i++) if(books[i].type==3) cout<<"小说类:"<<endl<<books[i].name<<" "<<books[i].author<<endl; for(i=0;i<num;i++) if(books[i].type==4) cout<<"散文类:"<<endl<<books[i].name<<" "<<books[i].author<<endl; } system("pause"); } return 1; } int Book::showInfo() { char *s;char *s1="学习";char *s2="名著";char *s3="小说";char *s4="散文"; switch(type) { case 1: s=new char[strlen(s1)+1]; strcpy(s,s1); break; case 2: s=new char[strlen(s2)+1]; strcpy(s,s2); break; case 3: s=new char[strlen(s3)+1]; strcpy(s,s3); break; case 4: s=new char[strlen(s4)+1]; strcpy(s,s4); break; } printf("%-15s%-18s%-15s%-15.1f",s,name,author,price);cout<<date<<endl; return 1; } int Book::e_delete() { char c; char s[MAX]; system("cls"); cout<<"请输入要删除的书籍名:";cin>>s; for(int i=0;i<num;i++) { if(strcmp(s,books[i].name)==0) { printf("\n---------------------------搜索书籍列表-----------------------\n\n"); printf("类型 书名 作者 价格 日期\n\n"); books[i].showInfo(); cout<<"1----------------删除并保存"<<endl<<"2----------------返回"<<endl; c=getch(); switch(c) { case'1': books[i]=books[200]; num--; system("cls"); cout<<"删除成功!"<<endl; system("pause"); return 0; case '2': return 0; } } else { cout<<"没有匹配的搜索对象"<<endl; system("pause"); return 0; } } return 0; } int Book::e_update() { char c; char n[MAX]; Book ex; system("cls"); cout<<"请输入要修改的书籍名:";cin>>n; for(int i=0;i<num;i++) { if(strcmp(n,books[i].name)==0) { printf("\n---------------------------搜索书籍列表-----------------------\n\n"); printf("类型 书名 作者 价格 日期\n\n"); books[i].showInfo(); cout<<"1----------------修改此书籍信息"<<endl<<"2----------------返回"<<endl; c=getch(); switch(c) { case'1': printf("\n---------------------------修改书籍信息-----------------------\n\n"); cout<<"1--学习"<<" "<<"2--名著"<<" "<<"3--小说"<<" "<<"4--散文"<<endl<<endl<<endl; cout<<"请输入修改后的书籍类型:";cin>>ex.type; printf("请输入修改后的书名:");gets(ex.name); printf("请输入修改后的作者名:");gets(ex.author); cout<<"请输入修改后的书籍价格:";cin>>ex.price; cout<<"请输入修改后的购买日期:";cin>>ex.date; books[i]=ex; cout<<"修改成功!"<<endl; system("pause"); return 1; case'2': return 1; } } } return 1; } Book &Book::operator =(Book &right) { type=right.type; strncpy(name,right.name,MAX); name[MAX]=0; strncpy(author,right.author,MAX); author[MAX]=0; price=right.price; date=right.date; return *this; } ---------------------------------------------------------------------------------------------------------------------- main.cpp:主函数 #include "Book.h" int main() { extern Book books[200]; extern num; char c; Book *mptr; mptr=&books[num]; for(;;) { system("cls"); printf("\n ________________ "); printf("\n ---------------------------|个人书籍管理系统|------------------------"); printf("\n ^^^^^^^^^^^^^^^^ \n\n\n"); cout<<" ||----------------------------按0键结束程序------------------------||"<<endl; cout<<" ||--------------------------按1键添加书籍信息----------------------||"<<endl; cout<<" ||--------------------------按2键显示书籍信息----------------------||"<<endl; cout<<" ||--------------------------按3键删除书籍信息----------------------||"<<endl; cout<<" ||--------------------------按4键修改书籍信息----------------------||"<<endl; cout<<" ||--------------------------按5键排列书籍信息----------------------||"<<endl; cout<<" 电气七班 刘怡然"<<endl; c=getch(); if(c=='0') break; switch(c) { case '1': mptr->f_open(); mptr->f_new(); mptr->f_save(); break; case '2': mptr->f_open(); mptr->display(); break; case '3': mptr->f_open(); mptr->e_delete(); mptr->f_save(); break; case '4': mptr->f_open(); mptr->e_update(); mptr->f_save(); break; case '5': mptr->f_open(); mptr->sort(); break; } } return 1; } 六、程序测试 主界面: 全部书籍列表: 修改书籍: 时间顺序排序书籍信息: 合同管理制度 1 范围 本标准规定了龙腾公司合同管理工作的管理机构、职责、合同的授权委托、洽谈、承办、会签、订阅、履行和变更、终止及争议处理和合同管理的处罚、奖励; 本标准适用于龙腾公司项目建设期间的各类合同管理工作,厂内各类合同的管理,厂内所属各具法人资格的部门,参照本标准执行。 2 规范性引用 《中华人民共和国合同法》 《龙腾公司合同管理办法》 3 定义、符号、缩略语 无 4 职责 4.1 总经理:龙腾公司经营管理的法定代表人。负责对厂内各类合同管理工作实行统一领导。以法人代表名义或授权委托他人签订各类合法合同,并对电厂负责。 4.2 工程部:是发电厂建设施工安装等工程合同签订管理部门;负责签订管理基建、安装、人工技术的工程合同。 4.3 经营部:是合同签订管理部门,负责管理设备、材料、物资的订购合同。 4.5 合同管理部门履行以下职责: 4.5.1 建立健全合同管理办法并逐步完善规范; 4.5.2 参与合同的洽谈、起草、审查、签约、变更、解除以及合同的签证、公证、调解、诉讼等活动,全程跟踪和检查合同的履行质量; 4.5.3 审查、登记合同对方单位代表资格及单位资质,包括营业执照、经营范围、技术装备、信誉、越区域经营许可等证件及履约能力(必要时要求对方提供担保),检查合同的履行情况; 4.5.4 保管法人代表授权委托书、合同专用章,并按编号归口使用; 4.5.5 建立合同管理台帐,对合同文本资料进行编号统计管理; 4.5.6 组织对法规、制度的学习和贯彻执行,定期向
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服