资源描述
课 程 报 告
课 程 名 称:
专 业 班 级 :
学 生 姓 名 :
学 号 :
任 课 教 师 :
学 期 :
课程汇报任务书
题 目
图书信息管理系统
重要
内容
开发一种图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己状况进行扩充,例如与否借出、库存量等)。使之能提供如下基本功能:
(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分
成绩评估教师:
1 需求分析
本次试验目是开发一种图书管理系统,且该图书管理系统中应包括如下基本功能:
(1)图书信息录入功能
(2)图书信息浏览功能
(3)查询功能
例如:按书名查询、按作者名查询等等
(4)排序功能
例如: 按照价钱排序、按出版时间排序等等
(5)图书信息删除与修改
除此之外,个人还可以根据自己爱好进行各方面扩展。
例如权限处理、图书排序等等。在我们设计自己程序时不仅可以运用书本上知识,还可以在互联网上查询有关该类信息,将其学习总结并运用在本次程序设计中。
运用这次程序设计试验,我们可以提高自己设计和编辑程序能力、理解一般程序编写过程,还可以巩固加深我们对C语言程序基本知识理解与掌握。我在该试验中不仅运用了书本上函数知识、文本输入和读出,还用互联网查阅了有关知识。
如“system("cls")”,用汉语解释就是清屏功能;尚有“getch()”函数,输入不读出,不过在运用“getch()”进行密码改写时老是出错误,就舍弃了该函数。在运用“system("cls")”时感觉还是很好,用该函数后不仅可以使程序在运行时美观大方,还可以一眼扫描到我们要找信息。
而我在我编写程序中设计了如下功能:
① 登陆权限功能
② 查找所有图书并总图书本数功能
③ 查找每本图书功能
④ 添加图书功能
⑤ 删除图书功能
⑥ 修改图书功能
⑦ 图书排序功能
⑧ 金额管理功能
2 概要设计
开始
在试验中我重要是用函数来处理该程序文献模块问题,用函数嵌套调用来处理各模块间联络问题。在编写程序时,我首先用构造数组struct list d[40]来定义图书多种信息。如:编号、书名、作者、出版社、类别等等。然后定义了全局变量number和total用来计算书本总数和金额总量。而后在主函数中用循环变量中while语句和分支构造中switch语句,来编写登录权限;创立文本并用文本输入和输出语句将图书信息输入文本;用函数嵌套来将各部分联络起来。
总体流程图如下:
登陆图书管理系统
查找每本图书
查找所有图书
添加图书
图书排序
金额管理
修改图书
删除图书
结束
下面简介一下各个部分程序:
1. 查看所有图书功能
该功能函数名称为:search_allbook。
先定义整形变量:i;而后用system("cls")进行清屏;再输入提醒信息“查看所有图书!”,后运用for循环进行循环输出。最终输出总书本数number。
开始
其函数流程图如下:
int i;输出:查看所有图书!
i=0
i<number
否
是
输出图书信息;输出图书总数:number;
结束
2. 查找每本图书功能
该函数名称为find_book。
这个函数也是这样,首先用system("cls")进行清屏处理;然后进行定义:int i, fg=0,char s[20];然后输出:输入图书编号和查找图书!再运用for循环语句将输入图书编号与该程序中图书编号相等再输出该本图书所有信息即图书编号、书名、作者、出版社、类别、出版时间、价格。
这个程序流程图与上一流程图差异不大,这里就不再写。
3. 添加图书功能
该部分函数名称为:add_book。
首先定义int i, count=0, choice3、struct list p和文献指针FILE *fp2,然后进行清屏处理。然后输出:添加图书!接着依次输入图书编号、书名、作者、出版社、类别、出版时间、价格。然后显示与否显示添加后信息,假如选择是则会用switch函数和for循环进行依次输出,最终显示“谢谢您对图书添加!”并且最终以一排星号结束,选择否则会显示“谢谢您对图书添加!”并且最终以一排星号结束。
其函数流程图如下:
开始
输入添加后图书信息!
与否显示添加后信息!
显示添加后图书信息!
是
否
结束
4. 删除图书功能
该部分函数名称为:delete_book。
先定义int i, fg= 0,ch;char s[20];和文献指针FILE *fp3,然后运用 system("cls")进行清屏处理。然后输出:删除图书,接着输出“请输入图书编号”,然后运用for循环语句将输入图书编号与该程序中图书编号相等,再将这个图书编号所在图书删除并将信息录入文档。接着显示“与否显示删除后信息”,假如选择是则会用switch函数和for循环进行依次输出该图书编号、书名、作者、出版社、类别、出版时间、价格。最终以一排星号结束。选择否也会显示一排星号结束。
该函数流程图与查看所有图书流程图类似,这里也不再写出。
5. 修改图书功能
该函数名称为:xiugai_book。
先定义int i,k;char s[20];和文献指针FILE *fp2,然后运用 system("cls")进行清屏处理。然后输入要修改图书编号,将新图书信息重新输入保留到文档中即可。
6. 图书排序功能
该函数名称为:paixu_book。
先定义int a;然后用system("cls")进行清屏处理!然后会输出1-按图书编号排序 2-按出版时间排序 3-按图书价格排序,然后根据输入数据会进入不一样子函数。
当选择1时,其函数名称为:num_paixu。
在这个函数中先对变量进行定义:int i,k,index,b和struct list temp。然后清屏,用for函数进行对图书编号大小比较,然后运用变量temp将不符合次序进行互换。然后显示“排序成功!”和“与否显示排序成果? 1:是 ; 2:否”,假如输入1则会依次输出排序后图书,最终以一排星号结束。
开始
该函数流程图为:
与否对图书进行排序?
输出排序后成果!
与否显示排序后成果?
是
否
结束
当选择2时,其函数名称为:time_paixu。
当选择3时,其函数名称为:price_paixu。
该函数与选择1时基本类似,在这就不一一论述了。
7. 金额管理功能
该函数名称为:cash_manage。
该函数就是将全局变量total输出。
3 详细设计
① 主函数
根据程序规定,一种程序只能有一种主函数。因此主函数是一种程序好坏基础,也是一种程序在运行时外在体现,因此对主函数设计我做了诸多修改,一直修改到让我满意。我把函数分为几种部分说吧!
1. 写完函数库及建立一种构造数组:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct list{ /*图书构造体*/
char num[50]; /*图书编号*/
char name[50]; /*图书名称*/
char author[50]; /*作者*/
char press[50]; /*图书出版社*/
char sort[50]; /*图书类别*/
int time; /*图书出版时间*/
double price; /*图书价格*/
struct list *next;
};struct list d[40] ;
2. 全局变量;
int number=0;
double total;
3. 所有函数申明;
void search_allbook (struct list d[]) ; /*查看所有图书*/
void find_book (struct list d[]) ; /*查找图书*/
void add_book (struct list d[]) ; /*添加图书*/
double delete_book (struct list d[]) ; /*删除图书*/
void paixu_book (struct list d[]) ; /*图书排序*/
void num_paixu(struct list d[]); /*按图书编号排序*/
void time_paixu(struct list d[]); /*按图书出版时间排序*/
void price_paixu(struct list d[]); /*按图书价格排序*/
void xiugai_book(struct list d[]); /*图书丢失*/
double cash_manage();
4. Main函数头以及定义变量和文本指针;
int main()
{
int q=1,w,r,l,i=0;
char b[20],b1[20]="gpf";
char m[20],m1[20]="1";
FILE *fp ;
5. 登陆权限功能函数
while(q){
system("cls");
printf("\n\n\n\n");
printf(" ********** 欢迎光顾 **********\n\n");
printf(" *************图书管理系统**************\n\n");
printf(" 1.顾客登录\n");
printf(" 0.退出登录\n");
printf(" 请输入您选择:");
scanf("%d",&w);
printf("\n");
getchar();
switch(w){
case 0:
q=0;
break;
case 1:
printf(" 请输入顾客名:");
scanf("%s",b);
printf("\n");
printf(" 请输入密码:");
scanf("%s",m);
getchar();
printf("\n");
if(strcmp(b,b1)!=0||strcmp(m,m1)!=0){
printf(" 顾客名或密码错误!\n");
printf(" 请重新输入:");
scanf("%c",&l);
getchar();
system("cls");
}
else{
printf(" 验证通过!请按Enter键进入!\n");
scanf("%c",&l);
}
6. 文本输出;
fp = fopen ("f.txt" , "r") ;
if(fp == NULL)
{
printf("File open the file 1!\n") ;
exit (0) ;
}
while (! feof(fp))
{
fscanf(fp," %s %s %s %s %s %d %lf\n",
d[i].num, d[i].name, d[i].author, d[i].press, d[i].sort, &d[i].time, &d[i].price) ;
i++ ;
}
number=i;
fclose (fp);
7. 图书管理系统功能列表函数及main函数结尾;
do{
system("cls");
printf("\n\n\n\n");
printf(" |**********************************************|\n");
printf(" | *图书信息管理系统* |\n");
printf(" |**********************************************|\n");
printf(" 1.查看所有图书 5.修改图书\n");
printf(" 2.查找图书 6.图书排序\n");
printf(" 3.添加图书 7.金额管理\n");
printf(" 4.删除图书 8.退出程序\n");
printf("\n\n");
printf("请输入所选择序号:");
scanf("%d",&r);
getchar();
switch(r){
case 1:
search_allbook(d);
getchar();
break ;
case 2:
find_book(d);
getchar();
break ;
case 3:
add_book(d);
getchar();
break ;
case 4:
delete_book(d);
getchar();
break ;
case 5:
xiugai_book(d);
getchar();
break ;
case 6:
paixu_book(d);
getchar();
break ;
case 7:
cash_manage();
getchar();
break;
case 8:
break;
}
}
while (r!=8);
printf("谢谢使用!\n");
}
}
return 0;
}
② 查看所有图书函数
void search_allbook(struct list d[])
{
int i;
system("cls");
printf(" |**********************************|\n");
printf(" | 查看所有图书! |\n");
printf(" |**********************************|\n");
printf("图书有关信息:编号 书名 作者 出版社 类别 出版时间 价格\n");
for(i=0;i<number;i++)
{
printf(" %s %s %s %s %s %d %.2lf\n", /*将数据输出到屏幕中*/
d[i].num,d[i].name,d[i].author,d[i].press,d[i].sort,d[i].time,d[i].price);
}
printf("书本总数:%d \n" , number);
printf("********************************************************************************\n");
}
③ 查找图书
void find_book(struct list d[])
{
system("cls");
int i, fg=0;
char s[20];
printf("输入图书编号:\n") ; /*提醒输入图书编号*/
scanf("%s" ,s);
printf(" |***********************************|\n");
printf(" | 查找图书! |\n");
printf(" |***********************************|\n");
for(i=0;i<number;i++)
if (strcmp(s, d[i].num)==0)
{
printf("该图书有关信息:编号 书名 作者 出版社 类别 出版时间 价格\n");
printf("%s %s %s %s %s %d %.2lf\n",
d[i].num, d[i].name, d[i].author, d[i].press, d[i].sort, d[i].time, d[i].price);
fg = 1;
break;
}
if (fg == 0)
{
printf("该图书编号不存在!\n");
printf("与否要继续查找? y:是 ; n:否\n") ;
getchar();
switch(getchar())
{
case 'y':
find_book(d); /*调用函数自身继续查找*/
case 'n' :
break ;
}
}
printf("********************************************************************************\n");
getchar();
}
④ 添加图书函数;
void add_book(struct list d[])
{
int i, count=0, choice3;
struct list p ;
FILE *fp2 ;
system("cls");
printf(" |***********************************|\n");
printf(" | 添加图书! |\n");
printf(" |***********************************|\n");
printf("请输入图书编号:");
scanf("%s",p.num);
printf("请输入图书名:");
scanf("%s",p.name);
getchar();
printf("请输入作者名:");
scanf("%s",p.author);
getchar();
printf("请输入出版社:");
scanf("%s",p.press);
getchar();
printf("请输入类别:");
scanf("%s",p.sort);
getchar();
printf("请输入出版时间:");
scanf("%d",&p.time);
getchar();
printf("请输入价格:");
scanf("%lf",&p.price);
printf(" 与否添加并显示添加后信息? 1:是 ; 2:否 \n");
printf(" 请选择:");
scanf("%d" , &choice3);
switch (choice3)
{
case 1 :
{
for(i=0;i<number;i++)
if(strcmp(p.num,d[i].num)>0)
count ++ ;
for(i=number;i>count;i--)
d[i] = d[i-1] ;
d[i] = p ;
number++; /*每添加一本图书,图书数目都会增长一种*/
fp2= fopen ("f.txt" , "w") ;
if(fp2== NULL)
{
printf("File open the file 2 !\n");
exit (0) ;
}
for(i=0;i<number;i++)
fprintf(fp2," %s %s %s %s %s %d %.2lf\n" ,
d[i].num,d[i].name,d[i].author,d[i].press,d[i].sort,d[i].time,d[i].price);
fclose (fp2) ;
printf("添加后图书信息:\n编号 书名 作者 出版社 类别 出版时间 价格\n");
for(i=0;i<number;i++)
printf(" %s %s %s %s %s %d %.2lf\n" ,
d[i].num,d[i].name,d[i].author,d[i].press,d[i].sort,d[i].time,d[i].price);
printf("谢谢您对图书添加!\n");
break;
}
case 2 :
printf("谢谢您对图书添加!\n");
break ;
}
printf("********************************************************************************\n");
getchar();
}
⑤ 删除图书函数
double delete_book(struct list d[]){
int i,count=0,fg= 0,ch;
char s[20];
FILE *fp3;
system("cls");
printf(" |***********************************|\n");
printf(" | 删除图书 |\n");
printf(" |***********************************|\n");
printf("请输入图书编号:");
scanf("%s", s);
for(i=0;i<number;i++)
if(strcmp(s,d[i].num)==0)
{
printf(" 与否删除并显示删除后信息? 1:是 ; 2:否 \n");
printf(" 请选择:");
scanf("%d" , &ch);
getchar();
switch (ch)
{
case 1 :
{
for(i=0;i<number;i++)
if(strcmp(s,d[i].num)>=0)
count ++ ;
for(i=(count-1);i<number;i++)
d[i]=d[i+1];
// d[i] = p ;
number--; /*每删除一本图书,图书数目都会减少一种*/
fp3=fopen ("f.txt" , "w") ;
if(fp3== NULL)
{
printf("File open the file 3 !\n");
exit (0) ;
}
for(i=0;i<number;i++)
fprintf(fp3," %s %s %s %s %s %d %.2lf\n" ,
d[i].num,d[i].name,d[i].author,d[i].press,d[i].sort,d[i].time,d[i].price);
fclose (fp3) ;
printf("删除后图书信息:\n编号 书名 作者 出版社 类别 出版时间 价格\n");
for(i=0;i<number;i++)
{
//if(strcmp(s,d[i].num)!=0)
printf("%s %s %s %s %s %d %.2lf\n",
d[i].num, d[i].name, d[i].author, d[i].press, d[i].sort, d[i].time, d[i].price);
}
break ;
case 2 :
break ;
}
}
fg = 1 ;
getchar();
//break ;
}
if(fg == 0)
printf("该图书编号不存在!\n");
printf("********************************************************************************\n");
return total;
getchar();
}
⑥ 修改图书函数
void xiugai_book(struct list d[])
{
int i,k;
char s[20];
FILE *fp4;
system("cls");
printf(" |***********************************|\n");
printf(" | 图书修改 |\n");
printf(" |***********************************|\n");
printf("请输入图书编号:");
scanf("%s", s);
for(i=0;i<number;i++)
if(strcmp(s,d[i].num)==0){
printf("您要修改图书信息为:\n编号 书名 作者 出版社 类别 出版时间 价格\n");
printf("%s %s %s %s %s %d %.2lf\n",
d[i].num, d[i].name, d[i].author, d[i].press, d[i].sort, d[i].time, d[i].price);
printf("请输入修改后图书信息:\n");
printf("请输入图书名:");
scanf("%s",d[i].name);
getchar();
printf("请输入作者名:");
scanf("%s",d[i].author);
getchar();
printf("请输入出版社:");
scanf("%s",d[i].press);
getchar();
printf("请输入类别:");
scanf("%s",d[i].sort);
getchar();
printf("请输入出版时间:");
scanf("%d",&d[i].time);
getchar();
printf("请输入价格:");
scanf("%lf",&d[i].price);
fp4=fopen ("f.txt" , "w") ;
if(fp4==NULL)
{
printf("File open the file 4 !\n");
exit (0) ;
}
for(i=0;i<number;i++)
fprintf(fp4," %s %s %s %s %s %d %.2lf\n" ,
d[i].num,d[i].name,d[i].author,d[i].press,d[i].sort,d[i].time,d[i].price);
fclose (fp4) ;
}
printf("与否显示修改后图书信息: 1:是 ; 2:否\n");
scanf("%d",&k);
getchar();
switch(k)
{
case 1:
for(i=0;i<number;i++)
if (strcmp(s, d[i].num)==0)
{
printf("该图书有关信息:\n编号 书名 作者 出版社 类别 出版时间 价格\n");
printf("%s %s %s %s %s %d %.2lf\n",
d[i].num, d[i].name, d[i].author, d[i].press, d[i].sort, d[i].time, d[i].price);
}
case 2:
printf("谢谢您对图书修改!\n");
break;
default:
printf("您输入有误!\n");
break;
printf("********************************************************************************\n");
getc
展开阅读全文