图书管理系统实训报告正文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
引言
随着社会经济的迅速发展和现代科学技术的进步,人类社会正逐渐走向现代化。
计算机事业的飞速发展,使得以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。
同时,随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高。
图书馆拥有丰富的文献信息资源,是社会系统的重要组成部分,在信息社会中的作用愈来愈重要。
图书管理系统是我国大部分学校或其他部门不可缺少的部分,书籍是人类的精神食粮,尤其对一些学校来说,图书馆非常重要。
计算机图书管理系统能够为用户实现借阅图书、管理等,随着计算机科学的日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对图书资源信息进行管理,具有着手工管理所无法比拟的优点,例如:查阅迅速、安全性高、可靠性高、存储量大、保密性好、成本低等。
计算机图书管理系统能够单一定向计算机图书方面,具有实用、精简功能等效率,这些优点能够极大的提高图书管理的效率,也是企业、学校的科学化、正规化管理的重要条件。
第一章绪论
1.1 课题背景
随着人类社会的发展,人类对知识的需求也不断增长。
在这种形势下,书籍就渐渐的成为人们获取并增长知识的主要途径,而图书馆就自然而然地在人们的生活中占据一定的位置,如何科学的管理图书馆不仅关系到读者求知的方便程度,也关系到图书馆的发展,因此,开发一套完善的图书管理系统就必不可少了。
随着现代社会信息量的不断增加,图书的数量和种类越来越多,人工手动管理会降低工作的效率,希望建立一个图书馆图书信息管理系统,是为了解决了人工手动管理图书信息在实践的问题,从而达到系统化、规范化、标准化的水平。
图书如何来管理庞大的图书信息成为一大难题,如何以一种便捷的管理方式加快图书流通信息的反馈速度,提高工作效率,已经成为学校图书馆管理的关键问题。
信息技术的飞速发展给图书馆的管理带来了全新的变革,采用图书管理系统对图书馆的运作进行全程管理,不仅是图书馆摆脱了以往人工管理产生的一系列问题,而且让图书馆提高了管理效率,减少了管理成本,让图书馆进行更有效的管理。
1.2 C语言概述
C语言是一种用途广泛、功能强大、使用灵活的过程性编程语言,既可用于编写应用软件,又能用于编写系统软件。
它既具有高级语言的特点,又具有汇编语言的特点。
C语言是一种结构化语言。
它层次清晰,便于按模块化方式组织程序,易于调试和维护。
C语言的表现能力和处理能力极强。
它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。
它还可以直接访问内存的物理地址,进行位(bit)一级的操作。
由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。
既可用于系统软件的开发,也适合于应用软件的开发。
此外,C语言还具有效率高,可移植性强等特点。
因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。
使C语言应用面十分广泛。
第二章开发工具简介
VC6.0 简介
Visual C++ 6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。
Visual C++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了 Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows 2000、Windows XP和Windows NT4.0。
所以实际中,更多的是以Visual C++6.0为平台。
VC6.0由以下三部分组成:
1、 Developer Studio,这是一个集成开发环境,我们日常工作的99%都是在它上面完成的, Developer Studio为Visual C++提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能。
我们也知道,Developer Studio并不是专门用于VC的,它也同样用于VB,VJ,VID等Visual Studio家族的其他同胞兄弟。
所以不能把Developer Studio当成Visual C++,它充其量只是Visual C++的一个壳子而已。
2、MFC。
从理论上来讲,MFC也不是专用于Visual C++,Borland C++,C++Builder和Symantec C++同样可以处理MFC。
同时,用Visual C++编写代码也并不意味着一定要用MFC,只要愿意,用Visual C++来编写SDK程序,或者使用STL,ATL,一样没有限制。
不过,Visual C++本来就是为MFC打造的,Visual C++中的许多特征和语言扩展也是为MFC而设计的,所以用Visual C++而不用MFC 就等于抛弃了Visual C++中很大的一部分功能。
但是,Visual C++也不等于MFC。
3、Platform SDK。
这才是Visual C++和整个Visual Studio的精华和灵魂,虽然我们很少能直接接触到它。
大致说来,Platform SDK是以Microsoft C/C++编译器为核心(不是Visual C++,看清楚了),配合MASM,辅以其他一些工具和文档资料。
上面说到Developer Studio没有编译程序的功能,那么这项工作是由谁来完成的呢?是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成Visual Studio的基石。
第三章图书管理系统的设计与实现
3.1 系统的需求分析
3.1.1 设计思想
随着现代社会信息量的不断增加,图书的种类及信息也越来越多,如何来管理庞大的图书信息成为一大难题,如何以一种便捷的管理方式加快图书流通信息的反馈速度,提高工作效率,已经成为学校图书馆管理的关键问题。
信息技术的飞速发展给图书馆的管理带来了全新的变革,采用图书管理系统对图书馆的运作进行全程管理,不仅是图书馆摆脱了以往人工管理产生的一系列问题,而且让图书馆提高了管理效率,减少了管理成本,让图书馆进行更有效的管理。
因此,设计的图书管理系统需要满足以下几方面要求:
读者的管理;
管理员的管理;
图书信息的管理。
3.1.2 系统功能描述
(1)系统主菜单:根据不同的选择进入不同的界面,从而进入系统和退出系统。
(2)功能菜单:显示可以进行的操作。
(3)查询主菜单:系统需要提供几种不同方式的查询手段,以实现灵活方便的管理整个系统。
一本图书包括序号、书名、价格、会员价等多个信息,会员可以通过输入图书的序号、名字进行查询所需的图书,然后可以浏览相关的图书信息。
管理员除此还可以对图书进行管理和对会员信息的管理,可以浏览所有的图书信息和会员信息。
(4)各功能的操作全部通过调用的关系连接而成,主函数通过调用各子函数来完成图书的管理与查询系统。
3.1.3功能模块划分
1.初始化图书信息
主函数通过调用initbook()子函数,采用scanf()输入方式输入图书的序号、名字、价格信息,会员价不需输入,只需用公式:会员价=价格*0.8f (会员价一律八折)即可。
2.增加图书信息
这个程序与初始化图书信息一样,通过调用addbook()子函数来增加一些图书的基本信息,如:图书的序号、名字、价格。
3.修改图书信息
调用modifybook()子函数来实现此功能,用来修改已经增加的图书信息,修改的是图书的价格、会员价,图书的序号、名字不改变。
4.删除图书信息
由主函数调用delbook()子函数实现删除图书信息功能。
输入要删除的图书名称,从而删除这本图书的所有信息,无法还原。
5.按图书的价格从高到低浏览图书信息
由函数showbook()来实现此功能。
通过图书的价格由高到低的顺序来查询图书的序号、名字、价格、会员价。
6.增加会员信息addhuiyuan()
存储会员信息的文件名是huiyuan(增加会员时文件读取方式采用“ab+”
方式),用scanf()输入方式输入每个会员信息是序号、名字、密码。
7.删除会员信息delhuiyuan()
输入要删除的会员名字,从而删除这个会员的所有信息,无法还原。
8.按名字浏览会员的所有信息showhuiyuan()
用来浏览已经增加的会员信息。
9.会员模块show()
会员可以输入名字和密码登陆会员界面,浏览图书信息。
可输入相应图书的名字,查询相应的图书信息。
3.1.4系统流程
3.2详细系统的设计与实现
3.2.1主函数界面设计
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define size 100
typedef struct
{
long number;
char name[9];
char ps[7];
int power;
}huiyuan;
typedef struct
{
long number;
char name[100];
float price;
float memberprice;
}book;
void main()
{
void menu1();
void menu2();
huiyuan show;
char datafile[40]="huiyuan";
char username[10],password[10];
int i;
printf("\n\n\n\n\n");
printf(" ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ \n");
printf(" ==============================================
\n");
printf(" *+ +* \n");
printf(" ************欢迎您进入图书管理系统************
\n");
printf(" *+ +* \n");
printf(" ==============================================
\n");
printf(" ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ \n");
printf("\n\n");
printf(" 请输入您的姓名:");
scanf("%s",username);
printf(" 请输入您的登录密码:");
scanf("%s",password);
if
((strcmp(username,"admin")==0)&&(strcmp(password,"admin")==0))
{printf(" 您是管理员! \n");
menu1();
}
FILE *fp;
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
while(fread(&show,sizeof(huiyuan),1,fp)!=0)
{
if((strcmp(username,)==0)&&(strcmp(password,show.ps)=
=0)
{
printf(" 您是普通会员\n");
menu2();
}
}
exit(0);
}
3.2.2 管理员界面与图书浏览界面设计void initbook();
void addbook();
void modifybook();
void delbook();
void showbook();
void addhuiyuan();
void delhuiyuan();
void showhuiyuan();
void show();
void quit();
void menu1()
{
char ch1,ch2,ch3;
do
{
printf("\n\n\n");
printf(" ============================================== \n");
printf(" ************欢迎进入图书管理员界面************ \n");
printf(" ============================================== \n");
printf("\t\t请您选择操作类型:\n");
printf(" ************1.欢迎进入图书信息系统************ \n");
printf(" ************2.欢迎进入会员信息系统************ \n");
printf(" ******************0.退出系统****************** \n");
printf(" 请输入您的选择! \n");
scanf("%s",&ch1);
switch(ch1)
{case '1':{
Do {
printf("\n\n\n");
printf(" *************>欢迎进入图书信息系统<********** \n");
printf("
\n");
printf(" ====1.初始化图书信息*******2.增加图书信息==== \n");
printf(“====3.修改图书信息*********4.删除图书信息==== \n");
printf(" ======5.按普通价格从高到低浏览图书信息=======
\n");
printf(" ==============0、返回上一级================== \n");
printf(" 请输入0--5,其他输入错误! \n");
scanf("%s",&ch2);
switch(ch2)
{
case '1':initbook();break;
case '2':addbook();break;
case '3':modifybook();break;
case '4':delbook();break;
case '5':showbook();getch();break;
case '0':break;
default:printf("操作错误\n");getch();break;
}
}while(ch2!='0');}break;
case '2':{
do
{
printf("\n\n\n");
printf(" *********>欢迎进入会员信息系统<********** \n");
printf("\n\n");
printf(" ===1.增加会员信息*******2.删除会员信息=== \n");
printf(" ==========3.按名字浏览会员信息=========== \n");
printf(" ==============0、返回上一级============== \n");
printf(" 请输入0--3,其他输入错误! \n");
scanf("%s",&ch3);
switch(ch3)
{
case '1':addhuiyuan();break;
case '2':delhuiyuan();break;
case '3':showhuiyuan();break;
case '0':break;
default:printf("操作错误\n");getch();break;
}
}while(ch3!='0');}break;
case '0':quit();
default:printf("操作错误\n");getch();break;
}
}while(ch1!='0');
}
void menu2()
{
char ch4;
do
{
printf("\n\n\n");
printf(" ========================================= \n");
printf(" **********欢迎进入图书浏览界面*********** \n");
printf(" ========================================= \n");
printf("
\n");
printf(" *******1.输入图书名浏览图书相应信息****** \n");
printf(" **************0.浏览结束***************** \n");
printf(" 请输入您的选择: ");
scanf("%s",&ch4);
switch(ch4)
{
case '1':void show();break;
case '0':quit();
default:printf("操作错误\n");getch();break;
}
}while(ch4!='0');
}
void quit()
{
printf("\n\n\n\n");
printf(" ============================================ \n");
printf(" ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ \n");
printf(" ***************>感谢您的使用<*************** \n");
printf(" ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ \n");
printf(" ============================================ \n");
getch();
exit(0);
}
3.2.3各功能模块设计
1、初始化图书信息
void initbook()
{
FILE *fp;
book tmps,show;
char datafile[40]="book";
int count=0;
fp=fopen(datafile,"wb+");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
printf("请输入图书的序号、名称、价格\n");
while(count<=size)
{
printf("\n请输入图书的序号:");
scanf("%ld",&tmps.number);
if(tmps.number==0)
break;
printf("请输入图书的名称:");
scanf("%s",);
printf("请输入图书的价格:");
scanf("%f",&tmps.price);
tmps.memberprice=tmps.price*0.8f;
if(fwrite(&tmps,sizeof(book),1,fp)!=1)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
count++;
}
if(count>size)
printf("输入数据已满\n");
fclose(fp);
printf("所输入图书信息如下:\n");
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
printf("序号\t名称\t价格\t会员价\n");
while(fread(&show,sizeof(book),1,fp)!=0)
printf("%ld\t%s\t%.1f\t%.1f\n",show.number,,show.pric e,show.memberprice);
fclose(fp);
}
2、添加图书信息
Void addbook()
{
FILE *fp;
book tmps,show;
char datafile[40]="book";
int count=0;
fp=fopen(datafile,"wb+");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
printf("请输入图书的序号、名称、价格\n");
while(count<=size)
{
printf("\n请输入图书的序号:");
scanf("%ld",&tmps.number);
if(tmps.number==0)
break;
printf("请输入图书的名称:");
scanf("%s",);
printf("请输入图书的价格:");
scanf("%f",&tmps.price);
tmps.memberprice=tmps.price*0.8f;
if(fwrite(&tmps,sizeof(book),1,fp)!=1)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
count++;
}
if(count>size)
printf("输入数据已满\n");
fclose(fp);
printf("所输入图书信息如下:\n");
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
printf("序号\t名称\t价格\t会员价\n");
while(fread(&show,sizeof(book),1,fp)!=0)
printf("%ld\t%s\t%.1f\t%.1f\n",show.number,,show.pric e,show.memberprice);
fclose(fp);
}
3、修改图书信息
void modifybook()
{
FILE *fp;
book tmps,s[size],show,temp;
char name[9],next,datafile[40]="book";
int recnumber,i,result=0;
float price;
begin:
printf("请输入要修改信息的图书的名称:");
scanf("%s",name);
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
while(feof(fp)==0)
{
if(fread(&temp,sizeof(book),1,fp)!=0)
{
if(strcmp(,name)==0)
result=1;
}
}
if(result==0)
{
printf("要修改的图书%s不存在\n",name);
fclose(fp);
goto begin;
}
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
recnumber=0;
while((fread(&tmps,sizeof(book),1,fp))!=0)
{
if(strcmp(,name)==0)
{
printf("请输入要修改图书%s的价格",name);
scanf("%f",&price);
s[recnumber].number=tmps.number;
strcpy(s[recnumber].name,);
s[recnumber].price=price;
s[recnumber].memberprice=price*0.8f;
recnumber++;
}
else
{
s[recnumber].number=tmps.number;
strcpy(s[recnumber].name,);
s[recnumber].price=tmps.price;
s[recnumber].memberprice=tmps.price*0.8f;
recnumber++;
}
}
fclose(fp);
fp=fopen(datafile,"wb+");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
for(i=0;i<recnumber;i++)
{
if(fwrite(&s[i],sizeof(book),1,fp)!=1)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
}
fclose(fp);
printf("图书信息修改成功!\n");
printf("是否继续修改(y/n)\n");
next=getche();
if(next=='y'||next=='Y')
goto begin;
printf("所修改图书信息如下:\n");
fp=fopen(datafile,"rb");
if(fp==NULL)
{ printf("文件%s信息错误\n",datafile);
exit(1);
}
printf("序号\t名称\t价格\t会员价\t\n");
while(fread(&show,sizeof(book),1,fp)!=0)
printf("%ld\t%s\t%.1f\t%.1f\n",show.number,,show.price, show.memberprice);
fclose(fp);
}
4、删除图书信息
void delbook()
{
FILE *fp;
book tmps,s[size],show,temp;
char name[10],next,datafile[40]="book";
int recnumber,i,result=0;
begin:
printf("请输入要删除的图书的名字:");
scanf("%s",name);
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
while(feof(fp)==0)
{
if(fread(&temp,sizeof(book),1,fp)!=0)
{
if(strcmp(,name)==0)
result=1;
}
}
if(result==0)
{
printf("要删除的图书%s不存在\n",name);
fclose(fp);
goto begin;
}
fclose(fp);
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
recnumber=0;
while((fread(&tmps,sizeof(book),1,fp))!=0) {
if(strcmp(,name)!=0)
{
s[recnumber].number=tmps.number;
strcpy(s[recnumber].name,);
s[recnumber].price=tmps.price;
s[recnumber].memberprice=tmps.price*0.8f;
recnumber++;
}
}
fclose(fp);
fp=fopen(datafile,"wb+");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
for(i=0;i<recnumber;i++)
{
if(fwrite(&s[i],sizeof(book),1,fp)!=1)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
}
fclose(fp);
printf("删除成功!\n");
printf("是否继续删除(y/n)\n");
next=getche();
if(next=='y'||next=='Y')
goto begin;
printf("删除图书后信息如下:\n");
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
printf("序号\t名称\t价格\t会员价\n");
while(fread(&show,sizeof(book),1,fp)!=0)
printf("%ld\t%s\t%.1f\t%.1f\n",show.number,,show.pric e,
show.memberprice);
fclose(fp);
}
5、浏览图书信息
void showbook()
{
FILE *fp;
char datafile[40]="book";
book tmps,s[size],show;
int recnumber,i,j,k;
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
recnumber=0;
while(fread(&tmps,sizeof(book),1,fp)!=0)
{
s[recnumber].number=tmps.number;
strcpy(s[recnumber].name,);
s[recnumber].price=tmps.price;
s[recnumber].memberprice=tmps.price*0.8f;
recnumber++;
}
fclose(fp);
if(recnumber>1)
{
for(i=0;i<recnumber-1;i++)
{
k=i;
for(j=i+1;j<recnumber;j++)
if(s[k].price<s[j].price)
k=j;
tmps.number=s[k].number;
strcpy(,s[k].name);
tmps.price=s[k].price;
tmps.memberprice=s[k].price*0.8f;
s[k].number=s[i].number;
strcpy(s[k].name,s[i].name);
s[k].price=s[i].price;
s[k].memberprice=s[i].price*0.8f;
s[i].number=tmps.number;
strcpy(s[i].name,);
s[i].price=tmps.price;
s[i].memberprice=tmps.memberprice;
}
}
fp=fopen(datafile,"wb+");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
for(i=0;i<recnumber;i++)
{
if(fwrite(&s[i],sizeof(book),1,fp)!=1)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
}
fclose(fp);
printf("浏览图书信息如下:\n");
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
printf("序号\t名称\t价格\t会员价\n");
while(fread(&show,sizeof(book),1,fp)!=0)
printf("%ld\t%s\t%.1f\t%.1f\n",show.number,,show.pric e,
show.memberprice);
fclose(fp);
}
6、增加会员信息
void addhuiyuan()
{
FILE *fp;
huiyuan tmps,show;
char datafile[40]="huiyuan";
int count=0;
fp=fopen(datafile,"ab+");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
printf("请输入会员的序号、名字、密码、权限\n");
while(count<=size)
{
printf("\n请输入会员的序号:");
scanf("%ld",&tmps.number);
if(tmps.number==0)
break;
printf("请输入会员的名字:");
scanf("%s",);
printf("请输入会员密码:");
scanf("%s",tmps.ps);
tmps.power=0;
if(fwrite(&tmps,sizeof(huiyuan),1,fp)!=1)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
count++;
}
if(count>size)
printf("输入数据已满\n");
fclose(fp);
printf("所输入图书信息如下:\n");
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
printf("序号\t姓名\t密码\t权限\n");
while(fread(&show,sizeof(huiyuan),1,fp)!=0)
printf("%ld\t%s\t%s\t%d\n",show.number,,show.ps,show.pow er);
fclose(fp);
}
7、删除会员信息
void delhuiyuan()
{
FILE *fp;
huiyuan tmps,s[size],show,temp;
char name[10],next,datafile[40]="huiyuan";
int recnumber,i,result=0;
begin:
printf("请输入要删除会员信息的名字:");
scanf("%s",name);
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
while(feof(fp)==0)
{
if(fread(&temp,sizeof(huiyuan),1,fp)!=0)
{
if(strcmp(,name)==0)
result=1;
}
}
if(result==0)
{
printf("要删除的会员%s不存在\n",name);
fclose(fp);
goto begin;
}
fclose(fp);
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
recnumber=0;
while((fread(&tmps,sizeof(huiyuan),1,fp))!=0) {
if(strcmp(,name)!=0)
{
s[recnumber].number=tmps.number;
strcpy(s[recnumber].name,);
strcpy(s[recnumber].ps,tmps.ps);
s[recnumber].power=tmps.power;
recnumber++;
}
}
fclose(fp);
fp=fopen(datafile,"wb+");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
for(i=0;i<recnumber;i++)
{
if(fwrite(&s[i],sizeof(huiyuan),1,fp)!=1)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
}
fclose(fp);
printf("删除成功!\n");
printf("是否继续删除(y/n)\n");
next=getche();
if(next=='y'||next=='Y')
goto begin;
printf("删除信息后的会员信息如下:\n");
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
printf("序号\t姓名\t密码\t权限\n");
while(fread(&show,sizeof(huiyuan),1,fp)!=0)
printf("%ld\t%s\t%s\t%d\n",show.number,,show.ps,show.power);
fclose(fp);
}
8、浏览会员信息
void showhuiyuan()
{
FILE *fp;
char datafile[40]="huiyuan";
huiyuan tmps,s[size],show;
int recnumber,i,j,k;
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
recnumber=0;
while(fread(&tmps,sizeof(huiyuan),1,fp)!=0) {
s[recnumber].number=tmps.number;
strcpy(s[recnumber].name,);
strcpy(s[recnumber].ps,tmps.ps);
s[recnumber].power=tmps.power;
recnumber++;
}
fclose(fp);
if(recnumber>1)
{
for(i=0;i<recnumber-1;i++)
{
k=i;
for(j=i+1;j<recnumber;j++)
if(strcmp(s[k].name,s[j].name)>0)
k=j;
tmps.number=s[k].number;
strcpy(,s[k].name);
strcpy(tmps.ps,s[k].ps);
tmps.power=s[k].power;
s[k].number=s[i].number;
strcpy(s[k].name,s[i].name);
strcpy(s[k].ps,s[i].ps);
s[k].power=s[i].power;
s[i].number=tmps.number;
strcpy(s[i].name,);
strcpy(s[i].ps,tmps.ps);
s[i].power=tmps.power;
}
}
fp=fopen(datafile,"wb+");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
for(i=0;i<recnumber;i++)
{
if(fwrite(&s[i],sizeof(huiyuan),1,fp)!=1)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
}
fclose(fp);
printf("浏览会员的信息如下:\n");
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
printf("序号\t姓名\t密码\t权限\n");
while(fread(&show,sizeof(huiyuan),1,fp)!=0)
printf("%ld\t%s\t%s\t%d\n",show.number,,show.ps,show.power);
fclose(fp);
}
9、会员模块
Void show()
{
FILE *fp;
book tmps,s[size],show,temp;
char name[9],datafile[40]="book";
int recnumber,i,result=0;
begin:
printf("请输入要浏览的图书名称:");
scanf("%s",name);
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
while(feof(fp)==0)
{
if(fread(&temp,sizeof(book),1,fp)!=0)
{
if(strcmp(,name)==0)
result=1;
}
}
if(result==0)
{
printf("要浏览的图书%s不存在\n",name);
fclose(fp);
goto begin;
}
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
recnumber=0;
while((fread(&tmps,sizeof(book),1,fp))!=0)
{
if(strcmp(,name)==0)
{
s[recnumber].number=tmps.number;
strcpy(s[recnumber].name,);
s[recnumber].price=tmps.price;
s[recnumber].memberprice=tmps.price*0.8f;
recnumber++;
}
}
fclose(fp);
fp=fopen(datafile,"wb+");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
for(i=0;i<recnumber;i++)
{
if(fwrite(&s[i],sizeof(book),1,fp)!=1)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
}
fclose(fp);
printf("所浏览的图书信息如下:\n");
fp=fopen(datafile,"rb");
if(fp==NULL)
{
printf("文件%s信息错误\n",datafile);
exit(1);
}
printf("序号\t名称\t价格\t会员价\t\n");
while(fread(&show,sizeof(book),1,fp)!=0)
printf("%ld\t%s\t%.1f\t%.1f\n",show.number,,show.price,show. memberprice);
fclose(fp);
}
第四章心得体会
才听说实训时,还不知道是干什么,并觉得会很难,一开始自己就有点无信心,因为任务量太大了,而且自己的C语言学的不太好,根本就不知道干什么。
但后来在同学的帮助与鼓励下,自己翻课本和资料,上网查找和上机实践,终于逐步的完成了本次的实训。
通过本次实训,我基本掌握了编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程及其相关的技术,对课本上的知识也有了更深的理解。
经过这两周的实训,不仅使我所学的C语言知识更加巩固,而且可以使理论与实践相结合,更好的掌握所学的知识。
让我发现书本上很深奥的知识变的更为简单,同样,对实验原理也了有更深的理解。
知道和理解了该理论在计算机中是怎样执行的,对该理论在实践中的应用有深刻的理解。
通过对该系统的设计,把课本上的理论知识变得生动有趣,激发了一些学习的积极性。
能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
本次实训的程序比较复杂,我在调试阶段经历了很长一段时间,最终经过一点点的、一段段的排查得到了正确的程序。
在编写程序的时候我也发现了自己有许多的不足之处,例如在课堂上学的理论知识很难把它运用到实际程序中,看似一个简单的功能模块往往需要很多知识的融合。
在图书管理与查询系统的编写过程中,我也更加明白了程序刚开始设计时结构与算法的重要性。
经过这次实训,让我对C++这门语言有了更深的认识,操作能力有了提高,想要写出的代码能运行,就需要耐心细心,毅力以及充沛的体力。
只有经过多次编辑,多次调试,再多次运行,才能编写出更好的程序,有时候需要多次的更正才能达到所要的运行结果。
这次实训是对我的一个很好的实践锻炼。
参考文献
谭洁强《C程序设计》清华大学出版社
张基温《C程序设计案例教程》清华大学出版社。