1、程序设计基础课程设计报告仲恺农业工程学院课 程 设 计课 程 程序设计基础姓 名 金峰院(系) 计算机科学与工程学院专业班级 计算机093学 号 *指导教师 黄明志职 称 副教授日 期 2010年06 月26日仲恺农业工程学院教务处制题目:图书信息管理系统设计图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能: 1系统以菜单方式工作2图书信息录入功能(图书信息用文件保存)输入3图书信息浏览功能输出4图书信息查询功能算法 查询方式:按书名查询按作者名查询5图书信息的删除与修改(可选项)总体设计: 程序分为六个模块主菜单图书信息录入
2、图书信息浏览图书信息查询图书信息修改系统说明程序框图如下:详细设计:主菜单void title(void)/*标题函数*/void menu(void)/*菜单显示函数*/char input_menu(void) /*菜单选择函数*/程序框图:图书信息录入void input_bookdata(void)/*图书录入函数*/程序框图:图书信息浏览void output(void)/*信息输出函数*/程序框图:图书信息查询void search(void)/*查询函数*/void search_output(char x)/*查找函数内嵌的输出函数。 有一缺陷,此算法放书名和作者名一样时,或出
3、错。*/程序框图:图书信息修改void change(void)/*修改函数修单*/void amend(char x)/*修改函数修单内嵌修改函数*/void delect(char x)/*修改函数修单内嵌删除函数*程序框图:系统说明void about(void)程序框图:软件测试:主界面:信息录入: 信息浏览: 信息查询: 信息修改: 综合设计总结:1.制作菜单时,使用getchar()函数,结果导致功能选择多了回车输入,导致下次选择出错。解决方法是更换为getch()函数,此函数不需要回车确认,故避免此问题。2.写输出函数时,遇到选择输出时,屏幕没有反应,检查函数没有错误。发现为程序
4、执行过快,闪一下就过去。引入了system()函数中的”pause”参数,在浏览输出后暂停。3.搜索资料时,算法有点问题,导致不够准确。所以在后面修改功能里,忽略其它查询方法,只采用isbn搜索。4.在定义指针数组时,有时会忘记是指针或者是指针变量。5.生成储存文件时,有时的fopen或者fclose会用错参数或者放错位置。附录:(源程序)/* 题目36:图书信息管理系统设计图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:1、系统以菜单方式工作2、图书信息录入功能(图书信息用文件保存)输入3、图书信息浏览功能输出4、图书信息
5、查询功能算法 查询方式: 按书名查询 按作者名查询5、图书信息的删除与修改(可选项) */#include#include /*system函数用*/#include /*调用getch函数,避开gechar函数的回车问题*/#define N 2struct Libary char isbn20,book_name20,writer20,publishing20,id10,date10; float price; int order;/*序号*/bookN;/*定义结构体,存放书籍数据*/void title(void);void menu(void);char input_menu(voi
6、d);void input_bookdata(void);void output(void);void search(void);void search_output(char x);void change(void);void about(void);void amend(char x);void delect(char x);/*以上n行为函数声明*/void main() char i; int flag=0; do system(cls); title(); menu(); i=input_menu();/*选择*/ switch(i) case1:input_bookdata();/
7、*输入*/ flag=1; break; case2:output();/*输出*/ break; case3:search();/*查找*/ break; case4:change();/*修改*/ break; case5:about();/*系统说明*/ break; case6:exit(0);/*退出*/ break; default:printf(输入错误。n); printf(n); while(flag=1);void title(void)/*标题函数*/ printf(n); printf(t*n); printf(t* *n); printf(t* 欢迎使用图书信息管理系
8、统 *n); printf(t* *n); printf(t* Welcome to Library Information Management System *n); printf(t* *n); printf(t* 计机093 金峰 200910214309 *n); printf(t*n); printf(n);void menu(void)/*菜单显示函数*/ printf(t请按序号选择功能:n); printf(n); printf(tttt1.图书信息录入n); printf(n); printf(tttt2.图书信息浏览n); printf(n); printf(tttt3.
9、图书信息查询n); printf(n); printf(tttt4.图书信息修改n); printf(n); printf(tttt5.系统说明n); printf(n); printf(tttt6.退出系统n); printf(n);char input_menu(void) /*菜单选择函数*/ char i; printf(t请输入:); i=getch(); system(cls); title(); return(i);void about(void) system(cls); title(); printf(n); printf(tt系统说明:n); printf(n); prin
10、tf(ttt1.本系统在visual c+ 2010 编译通过。n); printf(n); printf(ttt2.本系统只作为课程设计作品。n); printf(n); printf(ttt3.由于编写时间较短,不排除bug的存在。n); printf(n); printf(n); system(pause); main();void input_bookdata(void)/*图书录入函数*/ FILE *fp; int i=0; char j; system(cls); title(); printf(n); printf(n); printf(请输入图书信息:n); printf(n
11、); do printf(n); printf(序号:); scanf(%d,&booki.order); printf(n); printf(ISBN:); scanf(%s,booki.isbn); printf(n); printf(书名:); scanf(%s,booki.book_name); printf(n); printf(作者:); scanf(%s,booki.writer); printf(n); printf(分类号:); scanf(%s,booki.id); printf(n); printf(出版单位:); scanf(%s,booki.publishing);
12、printf(n); printf(出版时间:); scanf(%s,booki.date); printf(n); printf(书本价格:); scanf(%f,&booki.price); printf(n); printf(是否继续输入? Y or N ?: ); j=getch(); i+; printf(n); printf(n); while(j=y|j=Y)&iN); if(fp=fopen(books_data,wb)=NULL) printf(不能打开存储文件。n); return; for(i=0;iN;i+) if(fwrite(&booki,sizeof(struct
13、 Libary),1,fp)!=1) printf(无法写入文件!n); return; fclose(fp);/*以上几行为向文件输出数据*/ main();/*返回菜单*/void output(void)/*信息输出函数*/ FILE *fp; int i; fp=fopen(books_data,rb); printf(图书信息:n); printf(n); printf(序号tISBNt书名t作者t分类号t出版单位t出版时间t书本价格tn); printf(-n); for(i=0;iN;i+) fread(&booki,sizeof(struct Libary),1,fp); pr
14、intf( %dt,booki.order); printf(%st,booki.isbn); printf(%st,booki.book_name); printf(%st,booki.writer); printf(%st,booki.id); printf(%stt,booki.publishing); printf(%st,booki.date); printf(%4.1ftnn,booki.price); fclose(fp); system(pause); main(); void search(void)/*查询函数*/ FILE *fp; char i,book_name,wr
15、iter,isbn; int flag=1; do system(cls); title(); if(fp=fopen(books_data,wb)=NULL) printf(不能打开存储文件。n); return; /*打开文件,为了搜索。*/ printf(n); printf(t欢迎使用查找功能,请选择:n); printf(n); printf(t1.按ISBN查询n); printf(n); printf(t2.按书名查询n); printf(n); printf(t3.按作者查询n); printf(n); printf(t4.返回主菜单n); printf(n); printf(
16、请输入:); i=getch(); system(cls); title(); switch(i) case1:printf(n); printf(请输入要查找的ISBN号:); scanf(%s,&isbn); printf(n); printf(n); search_output(isbn); break; case2:printf(n); printf(请输入要查找的书名:); scanf(%s,&book_name); printf(n); printf(n); search_output(book_name); break; case3:printf(n); printf(请输入要查
17、找的作者:); scanf(%s,&writer); printf(n); printf(n); search_output(writer); break; case4:main(); break; default:printf(n); printf(输入错误!); flag=0; fclose(fp);/*关闭用于搜索用的文件*/ while(flag=0);void search_output(char x)/*查找函数内嵌的输出函数。 有一缺陷,此算法放书名和作者名一样时,或出错。*/ int i; printf(序号tISBNt书名t作者t分类号t出版单位t出版时间t书本价格tn);
18、printf(-n); for(i=0;iN;i+) if(x=*booki.book_name|x=*booki.writer|x=*booki.isbn)/*由于使用了不准确的判断标准,输入查找信息,或出现混乱的结果*/ printf(n); printf( %dt,booki.order); printf(%st,booki.isbn); printf(%st,booki.book_name); printf(%st,booki.writer); printf(%st,booki.id); printf(%stt,booki.publishing); printf(%st,booki.d
19、ate); printf(%4.1ftnn,booki.price); /*此处不加else来说明查询不到信息,是因为不知道N的数值,循环后,假如N之前输入的数值,则多输出几次esle的内容,影响过莫!*/ system(pause);void change(void)/*修改函数修单*/ char i,isbn,book_name,writer; int flag=1; do system(cls); title(); printf(n); printf(t欢迎使用修改功能(暂提供一种修改方式),请选择:n); printf(n); printf(t1.按ISBN修改n); printf(n
20、); printf(t2.返回主菜单n); printf(n); printf(请输入:); i=getch(); system(cls); title(); switch(i) case1:printf(请输入ISBN:); scanf(%s,&isbn); printf(n); search_output(isbn);/*显示要修改的项目*/ amend(isbn);/*修改项目*/ break; case2:main(); break; default:printf(n); printf(输入错误!); flag=0; while(flag=0);void amend(char x)/*
21、修改函数修单内嵌修改函数*/ FILE *fp; int i; char j=n,k;/*如果不初始化j的值,在后面重新输入数据那选了N,则j没有值,会出错*/ printf(n); printf(是否删除数据? Y or N?:); k=getch(); if(k=y|j=Y) delect(x); else printf(n); printf(n); printf(是否重新输入数据? Y or N?:); j=getch(); printf(n); if(j=y|j=Y) system(cls); for(i=0;iN;i+) if(x=*booki.isbn) printf(n); pr
22、intf(序号:); scanf(%d,&booki.order); printf(n); printf(ISBN:); scanf(%s,booki.isbn); printf(n); printf(书名:); scanf(%s,booki.book_name); printf(n); printf(作者:); scanf(%s,booki.writer); printf(n); printf(分类号:); scanf(%s,booki.id); printf(n); printf(出版单位:); scanf(%s,booki.publishing); printf(n); printf(出
23、版时间:); scanf(%s,booki.date); printf(n); printf(书本价格:); scanf(%f,&booki.price); printf(n); if(fp=fopen(books_data,wb)=NULL) printf(不能打开存储文件。n); return; for(i=0;iN;i+) if(fwrite(&booki,sizeof(struct Libary),1,fp)!=1) printf(无法写入文件!n); return; fclose(fp);/*以上几行为向文件输出数据*/ else change(); void delect(char x)/*修改函数修单内嵌删除函数*/ FILE *fp; int i; for(i=0;iN;i+) if(x=*booki.isbn) *booki.isbn=0; *booki.book_name=0; *booki.writer=0; *booki.id=0; *booki.publishing=0; *booki.date=0; booki.price=0; if(fp=fopen(books_data,wb)=NULL) printf(不能打开存储文件。n); return; for(i=0;iN;i+