1、课 程 报 告课 程 名 称: 程序设计实践 专 业 班 级 : 计科 1401 学 生 姓 名 : 牛草原 学 号 : 201416010101 任 课 教 师 : 张玉宏 学 期 :2013-2014 学年第二学期 0课程报告任务书题 目 图书信息管理系统主要内容开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等) 。使之能提供以下基本功能:(1)图书信息录入功能(图书信息用文件保存 )输入(2)图书信息浏览功能输出(3)查询功能(至少一种查询方式 )、排序功能(至少一种排序方式): 按书
2、名查询 按作者名查询 按照价钱排序 按出版时间排序等等(4)图书信息的删除与修改扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理 (2)报表打印功能(3)甚至根据自己情况,可以加上学生信息和借阅信息的管理,并扩充为图书借阅系统。 (4)模糊查询 (5)综合查询 (6)统计功能 比如统计处某一类别的图书信息 或 筛选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。任务要求一、提交材料应包括:(1)系统源代码 (2)课程报告二、整个设计过程具体要求(1)需求分析 要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;(2)设计过程 要求学生进
3、一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)(3)实现过程 要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;(4)总结阶段 按照要求完成系统设计和实现报告,并进行总结、答辩。报告撰写情况(30 分) 系统完成情况(30 分) 答辩情况(40 分)内容20 分规范程度5 分程序测试5 分基本功能20 分扩展功能10 分自述情况10 分答辩情况30 分 总分成绩评定成绩评定教师: 1目 录引 言.3绪 论.31需求分析.32概要设计.52.1 数据结构52.2 数据需求52.3 模块划分52.4 程序总体框架6三.详细设计63.1 登陆界面73
4、.2 功能服务.21四.调试分析48五.程序不足与改进49六.课程心得总结492引 言 经过对程序设计题目的分析可知,整个程序的设计实现大致可以分为五个模块,其中每个模块对应一个函数,他们分别是:图书的添加函数 void add_book(void); 删除图书的函数 void delete_book(void);查询图书的函数 void inquire_book(void);对图书进行修改的函数 void revise_book(void);以及对图书进行排序的函数 void sort_book(void);在这几个函数中,其功能的实现严格按照题目的要求:1 图书信息录入函数:主要功能是从键
5、盘上输入图书信息并将其写入文件中,作为图书馆的书库。以便对以下的函数进行运行,此函数应是整个程序的基础。2 查询图书函数:主要功能是按照一定的图书特征(图书名,图书作者)先将图书查询到。3 删除图书函数: 主要功能是将已存图书按照一定的图书特征(图书编号,图书名,图书作者,图书出版日期等)先将图书查询到,然后删除。4 图书排序函数: 主要功能是将已存图书按照一定的图书特征将图书进行详细的排序,具体可以分为按图书名排序,按图编号排序;按图书出版日期排序,按图书价格排序。5 图书的修改函数:功能是将已录入的图书的编号,作者,出版日期,价钱等进行修改。6 退出函数:该函数主要实现退出运行界面的功能。
6、绪 论整个程序的设计实现大致可以分为五个模块,其中每个模块对应一个函数,他们分别是:图书的添加函数 void add_book(void); 删除图书的函数 void delete_book(void);查询图书的函数 void inquire_book(void);对图书进行修改的函数 void revise_book(void);3以及对图书进行排序的函数 void sort_book(void);1 需求分析开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息。使之能提供以下基本功能:(1)图书信息录入功能(图书信息用文件保存)输入(2)图
7、书信息浏览功能输出(3)查询功能、排序功能: 按书名查询 按作者名查询 按照价钱排序 按出版时间排序(4)图书信息的删除与修改(5)学生登录和管理员登陆(6)退出系统程序扩展:(7)管理员功能:学生信息管理 1:学生卡添加2:学生卡信息查询3:学生卡密码查询4:学生卡删除图书信息管理(8)学生功能:图书信息查询通过此次课程设计,可以使我们增强自己的动手能力,并可以使自己编写的程序与程序之间的衔接更为自然,同时可以提高我们使用计算机解决实际问题的能力,了解并掌握 C语言开发程序的全过程。此外还可以较为综合地提高自己 C 语言编程能力及调试能力和自己对 C 语言语法的进一步认知,为自己的后续课程打
8、好基础。4二 概要设计2.1 数据结构该程序设计采用结构体和文件操作,用于实现对图书信息的存储,修改,查询及排序等功能。2.2 数据需求该程序需要系统输入及输出图书的编号,图书名,图书作者,图书出版日期以及图书价格等数据。2.3 模块划分该程序总体上分为 6 个模块,分别为:学生登录系统模块,管理员登陆系统模块,图书信息录入模块,图书信息修改模块,图书信息删除模块,图书信息查询模块及图书信息排序模块,学生卡添加模块,学生卡删除模块,学生卡信息查询模块,学生卡密码查询模块。其中图书信息查询模块分为按书名查询,作者名字查询。图书排序系统分为按图书编号排序,按图书价格排序,按图书出版时间排序。各个模
9、块之间相互独立但彼此之间有相互依附,通过彼此之间有规律的相互调用及参数的传递从而实现整个程序较为综合的功能。简言之:(1)void main_menu(void); 主菜单(2)void student(void); 学生登录函数(3)int stu_login(void); 学生登录验证(4)void stu_find(void); 学生图书查询函数1.void book_search_name(void); 书名查找2.void book_search_author(void); 作者查找3.void inquire_book(void); 查询图书(输出所有图书)(5)void admi
10、nistrar(void); 管理员登录模块(6)int adm_login(void); 管理员登录验证(7)void ad_st_menu(void); 学生信息管理菜单1.void add_card(void); 申请新学生卡2.void delete_card(void); 删除学生卡3.void passwordlookup(void); 学生卡密码查询4.void inquire_stu(void); 查询学生卡(输出所有学生卡信息)5(8)void ad_bk_menu(void); 图书信息管理菜单1.void add_book(void); 添加图书2.void delete
11、_book(void); 删除图书3.void revise_book(void); 修改图书4.void inquire_book1(void); 输出所有图书,管理员使用。5.void sort_book(void); 图书排序菜单.void sort_book_num(void); 图书排序编号.void sort_book_price(void); 图书排序价格.void sort_book_time(void); 图书排序出版时间2.4 程序总体框架(如图 2.4-1)主界面学生登录 管理员 登 陆学生登录图书查询按书名查找按作者查找输出所有图书学生信息管理图书管理申请新卡号删除卡号
12、查询卡号密码查询学生卡添加图书删除图书修改图书查询图书图书排序退出6图 2.4-1三 详细设计3.1 登陆界面:(1) 基本介绍:用户进入当用户选择进入登录界面时(如图 3.1.4-1 所示) ,该界面会显示出“欢迎使用草原图书管理系统”字样和一个图书馆的图案,然后用户可以选择:学生登录,管理员登陆和退出系统。选择学生登录时(如图 3.1.4-2 所示)需要登录学生卡号和密码经行身份验证。选择管理员登录时(如图 3.1.4-3 所示)需要登录管理员账号和登录密码。而当用户选择退出系统时,按任意键系统退出(如图 3.1.4-4 所示) 。进入身份鉴定界面时,需要输入用户名及密码,允许输入三次密码
13、。(2) 程序解析: 首先,使用了基本的输入输出的标准库函数 printf 与 scanf 函数,将所需的提示语输出并实现用户选择的输入。之后,用 switch 语句选择判断用户输入的操作,以确定后续操作。其中在提示文字的排版上,我使用的是用空格键来做调整,这样做虽然麻烦耗时,但是可以精准的实现自己预期效果。在身份鉴定操作界面,首先使用字符串数组将密码存放。在密码输入时,使用的是密文登陆方式,即输入密码时,判断若密码不是“回车符” ,就输出“*” (如图 3.1.4-5 所示)并且密码还能够在发现输入错后进行退格处理,然后判断输入的密码是否与密码字符串数组中的一致,从而判断是否进入下一个选择服
14、务界面。输入密码时,用 for 循环语句限制用户只能输入三次密码,若三次全错,则提示输入密码次数已达上限按任意键退出。(3) 实验代码:#include “header.h“void main_menu(void)char ch;system(“cls“);printf(“=n“);printf(“ 欢迎使用草原图书管理系统nn“);按编号排序按价格排序按出版时间排序7printf(“ n“);printf(“ 田田n“);printf(“ 田田n“);printf(“ 田田n“);printf(“ 田田n“);printf(“ n“);printf(“ n“);printf(“=nn“);p
15、rintf(“ 请选择您的登录模式nn“);printf(“ 【1】学生登录 【2】管理员登陆nn“);printf(“ 【0】退出nn“);printf(“=n“);printf(“请输入数字 02:“);while( ch=getch() ) m-)while( ch = getch() ) != r)12if(ch = b printf(“b b“);continue ;elsekey1 i+ = ch;printf(“*“);key1i = 0;strcpy(rc4_crypt(fread(if(strcmp(strcpy(user_ad, getch();fclose(fp);ret
16、urn 1;else if(m 0)printf(“n 对不起,密码输入错误,您还有%d 次机会重新输入正确密码n“,m);13elseprintf(“您输入密码的次数已达上限不能继续输入,请按任意键退出“);getch();fclose(fp);return 0;void student(void)/ 学生登录if( stu_login() ) /登录成功stu_find();return ;else /登录失败main_menu();return ;int stu_login(void) / 学生登录验证14int m ;int i = 0;int flag = 0;char ch, ke
17、y1 20 = 0;FILE* fp1=NULL;if(fp1=fopen(“.datastudentcard.txt“, “r“) = NULL ) /没有学生卡存在printf(“文件打开失败,按任意键结束.“);getch();return 0;elsesystem(“cls“);int flag;STU st, st1;printf(“请输入学号:“);scanf(“%s“, while(fread(break;15if( flag )printf(“没有找到此学号,请查证或与管理员联系。按任意键结束.n“);getch();fclose(fp1);return 0;elseprint
18、f(“请输入登录密码:“);while( ch = getch() ) != r)if(ch = b printf(“b b“);continue ;elsekey1 i+ = ch;printf(“*“);key1i = 0;strcpy(rc4_crypt( /加密if(strcmp(getch();fclose(fp1);return 1;elseprintf(“n 对不起,密码输入错误,您还有 3 次机会重新输入正确密码n“);for(m = 2;m = 0; m-)while( ch = getch() ) != r)if(ch = b printf(“b b“);continue
19、;elsekey1 i+ = ch;printf(“*“);key1i = 0;strcpy(rc4_crypt( /加密17if(strcmp(strcpy(user_stu, getch();fclose(fp1);return 1;else if(m 0)printf(“n 对不起,密码输入错误,您还有%d 次机会重新输入正确密码n“,m);elseprintf(“您输入密码的次数已达上限不能继续输入,请按任意键退出“);getch();fclose(fp1);return 0;(4)运行结果18图 3.1.4-1图 3.1.4-219图 3.1.4-3图 3.1.4-4203.2 功能
20、服务(1)基本介绍:功能服务分学生和管理员。以学生身份登录的用户可以使用图书查询服务系统(如图 3.2.4-1) ,其中有按书名查询(如图 3.2.4-2)按作者查询(如图 3.2.4.3)和输出所有图书信息(如图 3.2.4-4) 。以管理员身份登录进入管理员系统,管理员系统分学生信息管理和图书管理两大功能(如图 3.2.4-5),其中学生信息管理(如图 3.2.4-6)里面分申请新学生卡号(如图 3.2.4-7) ,删除卡号(如图 3.2.4-8) ,查询学生卡号密码(3.2.4-9) ,查询学生卡(如图 3.2.4-10)四大功能,图书管理分添加图书,删除图书,修改图书信息,查询所有图书
21、信息和图书排序(如图 3.2.4-11)五大功能。其中的图书排序(如图 3.2.4-12)分按编号排序(如图 3.2.4-13) ,价格排序(如图 3.2.4-14) ,出版时间排序(如图 3.2.4-15)三种。(2)程序解析:定义相关变量之后,使用 printf 与 scanf 输入选择的服务,并用getchar 读取选择,之后使用 switch 语句按照参数 choice 分别进行相应的后续函数调用。(3)实验代码:void stu_find(void) /学生查询图书系统char n;system(“cls“);printf(“tn“);printf(“t 您好,欢迎进入学生图书查询系
22、统nn“);printf(“tnn“);printf(“t 请选择查询图书的方式nn“);printf(“ 【 1 】按书名查询 【 2 】按作者n“);printf(“ 【 3 】显示所有图书信息 【 0 】返回nn“);printf(“nn“);printf(“请输入 03:“);while( n=getch() ) elseprintf(“n 此书库存为 0,不可借阅!n“);break;fclose(fp);if ( flag )22printf(“未找到此图书!请查证!“);printf(“n 按任意键返回.“);getch();stu_find();return ;/图书查询按作者
23、查询void book_search_author(void)char author30;FILE* fp;system(“cls“);printf(“ 欢迎使用图书查询服务nn“);printf(“请输入要查询书的作者:n“);fflush( stdin );scanf(“%s“, author);if( ( fp = fopen(“.databook.txt“, “r“) ) = NULL )printf(“数据读取失败,请与管理员联系,按任意键返回.“);getch();stu_find();return ;int flag = 1;int times = 1;BOOK book;whi
24、le( fread(flag = 0;if(times = 1) /确保只输出一次printf(“n 你要查询的信息如下:nn“);printf(“%-5st%-20st%st%-5st%-10st%sn“, “编号“, “书名“, “作者“, “价格“,“出版时间“, “库存“);times = 2;y = book.time_pub / 65536;m = ( book.time_pub % 65536 ) / 256;d = book.time_pub % 256;printf(“%-5dt%-20st%st%.2ft%-4d %02d %02dt%dn“, book.num, 23if
25、( book.stock 0 )printf(“此书库存为%d,可以借阅!借阅请记下图书编号!nn“, book.stock);elseprintf(“此书库存为 0,不可借阅!nn“);fclose(fp);if ( flag )printf(“未找到图书!请查证!“);printf(“n 按任意键返回.“);getch();stu_find();return ;void inquire_book(void) /查询图书(输出所有图书)学生用system(“cls“);printf(“n“);printf(“ 欢迎进入使用图书查询服务nn“);printf(“nn“);int y, m, d
26、;FILE* fp;BOOK book1;if( (fp = fopen(“.databook.txt“, “r“) = NULL )printf(“数据读取失败,按任意键返回.“);getch();stu_find();return ;printf(“%5st%-20st%st%-5st%-10st%sn“, “编号“, “书名“, “作者“, “价格“,“出版时间“, “库存“);while( fread(m = ( book1.time_pub % 65536 ) / 256;d = book1.time_pub % 256;printf(“%05dt%-20st%st%.2ft%-4d
27、 %02d %02dt%dn“, book1.num, 24fclose(fp);printf(“n“);printf(“n 按任意键返回.“);getch();stu_find();return ;/ 管理员系统void ad_menu(void)char n;system(“cls“);printf(“n“);printf(“您好,管理员%s,欢迎进入管理员系统nn“, user_ad);printf(“n“);printf(“请选择服务选项nn“);printf(“ 1 学生信息管理n“);printf(“ 2 图书管理n“);printf(“ 0 返回nn“);printf(“n“);
28、printf(“请输入 02:“);while( n=getch() ) switch(n)case 0 : ad_menu(); break;case 1 : add_card(); break;case 2 : delete_card(); break;case 3 : passwordlookup(); break;case 4 : inquire_stu(); break; /查询学生卡(输出所有学生卡信息)void add_card(void) / 申请新学生卡system(“cls“);FILE* fp=NULL;STU card;if( (fp=fopen(“.datastude
29、ntcard.txt“, “a+“) = NULL )printf(“数据读取失败!按任意键返回.“);getch();ad_st_menu();return ;printf(“请输入要申请的卡号:“);scanf(“%s“, printf(“请输入要申请卡号的姓名:“);scanf(“%s“, printf(“请输入要申请卡号的密码:“);scanf(“%s“, rc4_crypt(fwrite(26fclose(fp);printf(“注册成功!按任意键返回.“);getch();ad_st_menu();return ;void delete_card(void) / 删除学生卡syst
30、em(“cls“);FILE* fp=NULL, *fp1;STU card, card1;if( (fp=fopen(“.datastudentcard.txt“, “a+“) = NULL )printf(“数据读取失败!按任意键返回.“);getch();ad_st_menu();return ;printf(“请输入要删除的卡号(如果卡号不存在,则不做修改):“);scanf(“%s“, fp1 = fopen(“.datastudent.txt“, “w“);while( fread(fclose(fp);fclose(fp1);fp1 = fopen(“.datastudent.t
31、xt“, “r“);fp=fopen(“.datastudentcard.txt“, “w“);while(fread(fclose(fp);fclose(fp1);fp1 = fopen(“.datastudent.txt“, “w“);fclose(fp1);printf(“删除成功!按任意键返回.“);getch();ad_st_menu();27return ;void inquire_stu(void)/查询学生卡(输出所有学生卡信息)system(“cls“);printf(“n“);printf(“ 欢迎进入使用学生卡查询服务nn“);printf(“nn“);FILE* fp;
32、STU stu;if( (fp = fopen(“.datastudentcard.txt“, “r“) = NULL )printf(“数据读取失败,按任意键返回.“);getch();ad_st_menu();return ;printf(“%-15st%-20sn“, “学号“, “姓名“);while( fread(fclose(fp);printf(“n“);printf(“n 按任意键返回.“);getch();ad_st_menu();return ;void passwordlookup(void) /学生卡密码查询system(“cls“);FILE* fp;STU card
33、, card1;int flag=1;if( (fp=fopen(“.datastudentcard.txt“, “r“) = NULL )printf(“数据读取失败!按任意键返回.“);28getch();ad_st_menu();return ;printf(“欢迎使用密码查询服务nn“);printf(“请输入要查询的卡号:“);scanf(“%s“, while( fread(rc4_crypt(printf(“你要查询卡号的信息如下:nn“);printf(“学号 姓名 密码n“);printf(“%-15s%-15s%-6sn“, card1.num, card1.name, c
34、ard1.key);break;if( flag )printf(“n 没有找到此学号,请查证!n“);fclose(fp);printf(“n 按任意键返回.n“);getch();ad_st_menu();return ;/图书信息管理void ad_bk_menu(void)char n;system(“cls“);printf(“n“);printf(“您好,管理员%s,欢迎进入管理员系统nn“, user_ad);printf(“n“);printf(“请选择服务选项nn“);printf(“【 1 】添加图书 【 2 】删除图书nn“);printf(“【 3 】修改图书 【 4 】查询图书(所有图书信息)nn“);printf(“【 5 】图书排序 【 0 】返回nn“);printf(“n“);printf(“请输入数字 05:“);