资源描述
课 程 报 告
课 程 名 称: 程序设计实践
专 业 班 级 : 计科1401
学 生 姓 名 : 牛草原
学 号 : 16010101
任 课 教 师 : 张玉宏
学 期 :-第二学期
课程报告任务书
题 目
图书信息管理系统
重要
内容
开发一种图书信息管理系统,图书信息涉及:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以依照自己状况进行扩充,例如与否借出、库存量等)。使之能提供如下基本功能:
(1)图书信息录入功能(图书信息用文献保存)--输入v
(2)图书信息浏览功能--输出
(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):
l①按书名查询 ②按作者名查询 ③ 按照价钱排序 ④按出版时间排序等等
(4)图书信息删除与修改
扩展功能:可以按照自己限度进行扩展。例如(1)简朴权限解决 (2)报表打印功能(3)甚至依照自己状况,可以加上学生信息和借阅信息管理,并扩充为图书借阅系统。(4)模糊查询 (5)综合查询 (6)记录功能 例如记录处某一类别图书信息 或 筛选出不大于指定数量库存图书信息等等,总之,可以依照自己需求进行分析功能。
任务
规定
一、提交材料应涉及:(1)系统源代码 (2)课程报告
二、整个设计过程详细规定
(1)需求分析 规定学生对案例系统进行分析,设计出需要完毕功能,完善各个模块调用关系;
(2)设计过程 规定学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)
(3)实现过程 规定学生养成良好编码习惯、完毕各个模块并进行测试,最后完毕系统整体测试;
(4)总结阶段 按照规定完毕系统设计和实现报告,并进行总结、答辩。
成绩
评估
报告撰写状况(30分)
系统完毕状况(30分)
答辩状况(40分)
总分
内容
20分
规范限度
5分
程序测试
5分
基本功能20分
扩展功能10分
自述状况10分
答辩状况
30分
成绩评估教师:
目 录
引 言.....................................................3
绪 论.....................................................3
一. 需求分析...............................................3
二. 概要设计...............................................5
2.1数据构造..............................................................5
2.2数据需求..............................................................5
2.3模块划分..............................................................5
2.4程序总体框架..........................................................6
三.详细设计..................................................................6
3.1登陆界面..............................................................7
3.2功能服务.............................................................21
四.调试分析..............................................48
五.程序局限性与改进........................................49
六.课程心得总结..........................................49
引 言
通过对程序设计题目分析可知,整个程序设计实现大体可以分为五个模块,其中每个模块相应一种函数,她们分别是:图书添加函数void add_book(void); 删除图书函数void delete_book(void);查询图书函数void inquire_book(void);对图书进行修改函数void revise_book(void);以及对图书进行排序函数void sort_book(void);在这几种函数中,其功能实现严格按照题目规定:
1 图书信息录入函数:重要功能是从键盘上输入图书信息并将其写入文献中,作为图书馆书库。以便对如下函数进行运营,此函数应是整个程序基本。
2 查询图书函数:重要功能是按照一定图书特性(图书名,图书作者)先将图书查询到。
3 删除图书函数: 重要功能是将已存图书按照一定图书特性(图书编号,图书名,图书作者,图书出版日期等)先将图书查询到,然后删除。
4 图书排序函数: 重要功能是将已存图书按照一定图书特性将图书进行详细排序,详细可以分为按图书名排序,按图编号排序;按图书出版日期排序,按图书价格排序。
5 图书修改函数:功能是将已录入图书编号,作者,出版日期,价钱等进行修改。
6退出函数:该函数重要实现退出运营界面功能。
绪 论
整个程序设计实现大体可以分为五个模块,其中每个模块相应一种函数,她们分别是:图书添加函数void add_book(void); 删除图书函数void delete_book(void);查询图书函数void inquire_book(void);对图书进行修改函数void revise_book(void);以及对图书进行排序函数void sort_book(void);
1 需求分析
开发一种图书信息管理系统,图书信息涉及:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息。使之能提供如下基本功能:
(1)图书信息录入功能(图书信息用文献保存)--输入v
(2)图书信息浏览功能--输出
(3)查询功能、排序功能:
l ①按书名查询 ②按作者名查询 ③ 按照价钱排序 ④按出版时间排序
(4) 图书信息删除与修改
(5) 学生登录和管理员登陆
(6) 退出系统
程序扩展:
(7) 管理员功能:
①学生信息管理
1:学生卡添加
2:学生卡信息查询
3:学生卡密码查询
4:学生卡删除
②图书信息管理
(8)学生功能:
①图书信息查询
通过本次课程设计,可以使咱们增强自己动手能力,并可以使自己编写程序与程序之间衔接更为自然,同步可以提高咱们使用计算机解决实际问题能力,理解并掌握C语言开发程序全过程。此外还可以较为综合地提高自己C语言编程能力及调试能力和自己对C语言语法进一步认知,为自己后续课程打好基本。
二 概要设计
2.1 数据构造
该程序设计采用构造体和文献操作,用于实现对图书信息存储,修改,查询及排序等功能。
2.2 数据需求
该程序需要系统输入及输出图书编号,图书名,图书作者,图书出版日期以及图书价格等数据。
2.3 模块划分
该程序总体上分为6个模块,分别为:学生登录系统模块,管理员登陆系统模块,图书信息录入模块,图书信息修改模块,图书信息删除模块,图书信息查询模块及图书信息排序模块,学生卡添加模块,学生卡删除模块,学生卡信息查询模块,学生卡密码查询模块。其中图书信息查询模块分为按书名查询,作者名字查询。图书排序系统分为按图书编号排序,按图书价格排序,按图书出版时间排序。各个模块之间互相独立但彼此之间有互相依附,通过彼此之间有规律互相调用及参数传递从而实现整个程序较为综合功能。简言之:
(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 administrar(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); 查询学生卡(输出所有学生卡信息)
(8)void ad_bk_menu(void); 图书信息管理菜单
1.void add_book(void); 添加图书
2.void delete_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)
主界面
退出
学生登录
学生登录
管理员 登 陆
图书管理
学生信息管理
图书查询
查询图书
按作者查找
按书名查找
输出所有图书
修改图书
删除图书
添加图书
查询学生卡
查询卡号密码
删除卡号
申请新卡号
图书排序
按编号排序
按出版时间排序
按价格排序
图2.4-1
三 详细设计
3.1登陆界面:
(1) 基本简介:顾客进入当顾客选取进入登录界面时(如图3.1.4-1所示),该界面会显示出“欢迎使用草原图书管理系统”字样和一种图书馆图案,然后顾客可以选取:学生登录,管理员登陆和退出系统。选取学生登录时(如图3.1.4-2所示)需要登录学生卡号和密码经行身份验证。选取管理员登录时(如图3.1.4-3所示)需要登录管理员账号和登录密码。而当顾客选取退出系统时,按任意键系统退出(如图3.1.4-4所示)。进入身份鉴定界面时,需要输入顾客名及密码,容许输入三次密码。
(2) 程序解析: 一方面,使用了基本输入输出原则库函数printf与scanf函数,将所需提示语输出并实现顾客选取输入。之后,用switch语句选取判断顾客输入操作,以拟定后续操作。其中在提示文字排版上,我使用是用空格键来做调节,这样做虽然麻烦耗时,但是可以精准实现自己预期效果。在身份鉴定操作界面,一方面使用字符串数组将密码存储。在密码输入时,使用是密文登陆方式,即输入密码时,判断若密码不是“回车符”,就输出“*”(如图3.1.4-5所示)并且密码还可以在发现输入错后进行退格解决,然后判断输入密码与否与密码字符串数组中一致,从而判断与否进入下一种选取服务界面。输入密码时,用for循环语句限制顾客只能输入三次密码,若三次全错,则提示输入密码次数已达上限按任意键退出。
(3) 实验代码:
#include "header.h"
void main_menu(void)
{
char ch;
system("cls");
printf(" ==============================================\n");
printf(" 欢迎使用草原图书管理系统\n\n");
printf(" █████\n");
printf(" █田█田█\n");
printf(" █田█田█\n");
printf(" █田█田█\n");
printf(" █田█田█\n");
printf(" █████\n");
printf(" ◢██□██◣\n");
printf(" ==============================================\n\n");
printf(" 请选取您登录模式\n\n");
printf(" 【1】学生登录 【2】管理员登陆\n\n");
printf(" 【0】退出\n\n");
printf(" ==============================================\n");
printf("请输入数字0~~2:");
while(( ch=getch() ) && ( ch>'2' || ch<'0' )) //容错解决
printf("\n你输入格式错误,请重新输入:");
switch( ch )
{
case '0':
break;
case '1':
student();
break;
case'2':
administrator();
break;
}
}
void administrator(void) //管理员登录模块菜单
{
if( adm_login() ) //登录成功
{
ad_menu();
return ;
}
else //登录失败
{
main_menu();
return ;
}
}
int adm_login(void) //管理员登录
{
int m ;
int i = 0;
int flag = 0;
char ch,key1[ 20 ] = {0};
FILE* fp=NULL;
ADMIN ad,ad1;
fp=fopen(".\\data\\administrator.txt","r"); //判断与否有管理员注册
if(fp == NULL)
{
flag = 1;
}
else if( fgetc(fp) == EOF ) //未读取到有管理员注册
{
flag = 1;
}
if( flag )
{
system("cls");
printf("您还没有注册管理员,请先注册\n请输入账号:");
scanf("%s",&ad.num);
printf("请输入顾客名:");
scanf("%s",&ad.user);
printf("请输入密码:");
scanf("%s",&ad.key);
rc4_crypt( &ad.key,"" ); //加密
if( fp != NULL )
fclose(fp);
fp = fopen(".\\data\\administrator.txt","w");
fwrite(&ad,sizeof(ADMIN),1,fp);
printf("注册成功!按任意键继续...\n");
getch();
fclose(fp);
}
system("cls");
printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
printf("\t★ 欢迎使用管理员系统,请登录! ★\n");
printf("\t★ ★\n");
printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
printf("\t请输入管理员账号:");
scanf("%s",&ad.num);
fp = fopen(".\\data\\administrator.txt","r");
while(fread(&ad1,sizeof(ADMIN),1,fp) != 0) //以数据块方式读出数据管理员账号
{
if(strcmp(ad1.num ,ad.num) == 0 )
{
flag = 0;
break;
}
}
if( flag )
{
printf("没有找到此卡号,按任意键结束...\n");
getch();
fclose(fp);
return 0;
}
else
{
printf("\t请输入登录密码:");
while(( ch = getch() ) != '\r')
{
if(ch == '\b' && i != 0) //密码输入容错解决,退格
{
i--;
printf("\b \b");
continue ;
}
else
{
key1[ i++ ] = ch;
printf("*");
}
}
key1[i] = '\0';
strcpy(&ad.key,key1);
rc4_crypt(&ad.key,"");
fread(&ad1,sizeof(ADMIN),1,fp);
if(strcmp(&ad.key,&ad1.key) == 0 )
{
printf("\n登录成功,按任意键返回...");
strcpy(user_ad,&ad1.user);
getch();
fclose(fp);
return 1;
}
else
{
printf("\n对不起,密码输入错误,您尚有3次机会重新输入对的密码~~~\n");
for(m = 2;m >= 0;m--)
{
while(( ch = getch() ) != '\r')
{
if(ch == '\b' && i != 0) //密码输入容错解决,退格
{
i--;
printf("\b \b");
continue ;
}
else
{
key1[ i++ ] = ch;
printf("*");
}
}
key1[i] = '\0';
strcpy(&ad.key,key1);
rc4_crypt(&ad.key,"");
fread(&ad1,sizeof(ADMIN),1,fp);
if(strcmp(&ad.key,&ad1.key) == 0 )
{
printf("\n登录成功,按任意键返回...");
strcpy(user_ad,&ad1.user);
getch();
fclose(fp);
return 1;
}
else if(m > 0)
printf("\n对不起,密码输入错误,您尚有%d次机会重新输入对的密码~~~\n",m);
else
{
printf("您输入密码次数已达上限不能继续输入,请按任意键退出~~~");
getch();;
fclose(fp);
return 0;
}
}
}
}
}
void student(void)// 学生登录
{
if( stu_login() ) //登录成功
{
stu_find();
return ;
}
else //登录失败
{
main_menu();
return ;
}
}
int stu_login(void) // 学生登录验证
{
int m ;
int i = 0;
int flag = 0;
char ch,key1[ 20 ] = {0};
FILE* fp1=NULL;
if((fp1=fopen(".\\data\\studentcard.txt","r")) == NULL ) //没有学生卡存在
{
printf("文献打开失败,按任意键结束...");
getch();
return 0;
}
else
{
system("cls");
int flag;
STU st,st1;
printf("请输入学号:");
scanf("%s",&st.num);
while(fread(&st1,sizeof(STU),1,fp1) != 0) //以数据块方式读出数据学生卡号
{
if(strcmp(st1.num ,st.num) == 0 )
{
flag = 0;
break;
}
}
if( flag )
{
printf("没有找到此学号,请查证或与管理员联系。按任意键结束...\n");
getch();
fclose(fp1);
return 0;
}
else
{
printf("请输入登录密码:");
while(( ch = getch() ) != '\r')
{
if(ch == '\b' && i != 0) //密码输入容错解决,退格
{
i--;
printf("\b \b");
continue ;
}
else
{
key1[ i++ ] = ch;
printf("*");
}
}
key1[i] = '\0';
strcpy(&st.key,key1);
rc4_crypt(&st.key,""); //加密
if(strcmp(&st.key,&st1.key) == 0) //字符比较。验证密码
{
printf("登录成功,按任意键返回...\n");
getch();
fclose(fp1);
return 1;
}
else
{
printf("\n对不起,密码输入错误,您尚有3次机会重新输入对的密码~~~\n");
for(m = 2;m >= 0;m--)
{
while(( ch = getch() ) != '\r')
{
if(ch == '\b' && i != 0) //密码输入容错解决,退格
{
i--;
printf("\b \b");
continue ;
}
else
{
key1[ i++ ] = ch;
printf("*");
}
}
key1[i] = '\0';
strcpy(&st.key,key1);
rc4_crypt(&st.key,""); //加密
if(strcmp(&st.key,&st1.key) == 0) //字符比较。验证密码
{
printf("登录成功,按任意键返回...\n");
strcpy(user_stu,&st1.name);
getch();
fclose(fp1);
return 1;
}
else if(m > 0)
printf("\n对不起,密码输入错误,您尚有%d次机会重新输入对的密码~~~\n",m);
else
{
printf("您输入密码次数已达上限不能继续输入,请按任意键退出~~~");
getch();;
fclose(fp1);
return 0;
}
}
}
}
}
}
(4) 运营成果
图3.1.4-1
图3.1.4-2
图3.1.4-3
图3.1.4-4
3.2功能服务
(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)四大功能,图书管理分添加图书,删除图书,修改图书信息,查询所有图书信息和图书排序(如图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("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
printf("\t您好,欢迎进入学生图书查询系统\n\n");
printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
printf("\t请选取查询图书方式\n\n");
printf(" 【 1 】按书名查询 【 2 】按作者\n");
printf(" 【 3 】显示所有图书信息 【 0 】返回\n\n");
printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
printf("请输入0~3:");
while(( n=getch() ) && ( n>'3' || n<'0' ))
printf("\n输入错误,请重新输入:");
switch(n)
{
case '0' :main_menu();
break;
case '1' :book_search_name();
break;
case '2' :book_search_author();
break;
case '3' :inquire_book();
break;
}
}
//图书查询——按书名查询
void book_search_name(void)
{
char name[30];
F
展开阅读全文