C语言图书管理系统论文.docx

上传人:b****2 文档编号:2686615 上传时间:2023-05-04 格式:DOCX 页数:30 大小:211.71KB
下载 相关 举报
C语言图书管理系统论文.docx_第1页
第1页 / 共30页
C语言图书管理系统论文.docx_第2页
第2页 / 共30页
C语言图书管理系统论文.docx_第3页
第3页 / 共30页
C语言图书管理系统论文.docx_第4页
第4页 / 共30页
C语言图书管理系统论文.docx_第5页
第5页 / 共30页
C语言图书管理系统论文.docx_第6页
第6页 / 共30页
C语言图书管理系统论文.docx_第7页
第7页 / 共30页
C语言图书管理系统论文.docx_第8页
第8页 / 共30页
C语言图书管理系统论文.docx_第9页
第9页 / 共30页
C语言图书管理系统论文.docx_第10页
第10页 / 共30页
C语言图书管理系统论文.docx_第11页
第11页 / 共30页
C语言图书管理系统论文.docx_第12页
第12页 / 共30页
C语言图书管理系统论文.docx_第13页
第13页 / 共30页
C语言图书管理系统论文.docx_第14页
第14页 / 共30页
C语言图书管理系统论文.docx_第15页
第15页 / 共30页
C语言图书管理系统论文.docx_第16页
第16页 / 共30页
C语言图书管理系统论文.docx_第17页
第17页 / 共30页
C语言图书管理系统论文.docx_第18页
第18页 / 共30页
C语言图书管理系统论文.docx_第19页
第19页 / 共30页
C语言图书管理系统论文.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言图书管理系统论文.docx

《C语言图书管理系统论文.docx》由会员分享,可在线阅读,更多相关《C语言图书管理系统论文.docx(30页珍藏版)》请在冰点文库上搜索。

C语言图书管理系统论文.docx

C语言图书管理系统论文

数据结构实习报告

 

题目:

图书馆管理系统

学号:

20081514311

班级:

计科083

姓名:

陈阳光

完成时间:

2010-4-21

 

一、需求分析

1.依据题目要求以及现实中图书馆的需求,应将该系统分为两大模块:

图书管理和会员管理。

图书管理模块中包括对图书的增加、修改、删除、查询、统计等操作,以及对图书借入借出服务。

会员管理包括对会员卡号的申请、删除、统计等操作。

2.界面应该具有友善、直观、易操作等特点,本系统采用数字输入选择操作。

二、概要设计

1.整体设计

经过需求分析,本系统分为两大模块:

书籍管理模块和会员管理模块。

但是从易用性方面考虑,将书籍管理模块中的借书和还书模块放到主界面中。

结构图如下所示:

2.详细设计

2.1结构体设计流程图

structstudent/*定义会员类型,用于存放借出的书籍*/

{

intcardnum;//卡号

charlendbook[10];//借书数组最多借书十本

}student[1000];

structbook/*定义书的类型*/

{否

intbooknum;//书号

charbookname[20];//书名

charauthor[10];//作者

intbookcount;//书的剩余数量是

}book[1000];

structcard/*借书卡的数据类型*/

{

intcardnum;//卡号

charstudentname[10];//会员姓名

charstudentclass[10];//会员班级

}card[1000];

2.2主函数

主函数要求设计比较简洁,只提供设输入,处理和输出部分的函数调用。

其中各功能模块用菜单方式选择。

HWNDhwnd=GetForegroundWindow();

SetWindowText(hwnd,"★图书管理系统★");

intch1,ch2,ch3;

do

{SetConsoleTextAttribute(h,FOREGROUND_RED);//设置字体颜色为红色

printf("\n\t\t★欢★迎★进★入★图★书★管★理★系★统★\n\n");

printf("\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");

printf("\t※※\n");

printf("\t※★图书管理系统★※\n");

printf("\t※※\n");

printf("\t※1:

<借书系统>2:

<还书系统>※\n");

printf("\t※3:

<会员管理>4:

<书籍管理>※\n");

printf("\t※0:

<退出>※\n");

printf("\t※※\n");

printf("\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n");

printf("\t\t请选择操作类型(0-4):

");

scanf("%d",&ch1);

switch(ch1)

{case1:

lendbook();break;

case2:

returnbook();break;

case3:

{

do

{SetConsoleTextAttribute(h,FOREGROUND_GREEN);//设置字体颜色为绿色

printf("\n\n");

printf("\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");

printf("\t※※\n");

printf("\t※★欢迎进入会员管理系统★※\n");

printf("\t※※\n");

printf("\t※1:

<申请新卡>2:

<删除卡号>※\n");

printf("\t※3:

<借书统计>4:

<会员统计>※\n");

printf("\t※0:

<返回>※\n");

printf("\t※※\n");

printf("\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n");

printf("\t\t请选择操作类型(0-4):

");

scanf("%d",&ch3);

switch(ch3)

{case1:

addcard();break;

case2:

delcard();break;

case3:

lendcount();break;

case4:

cardcount();break;

case0:

break;

default:

printf("\n\t\t无效操作,按任意键返回...\n");getch();break;

}

}while(ch3!

=0);

}break;

case4:

{

do{

SetConsoleTextAttribute(h,FOREGROUND_GREEN);//设置字体颜色为绿色

printf("\n\n");

printf("\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");

printf("\t※※\n");

printf("\t※★欢迎进入书籍管理系统★※\n");

printf("\t※※\n");

printf("\t※1:

<增加图书>2:

<删除图书>※\n");

printf("\t※3:

<查询图书>4:

<书籍统计>※\n");

printf("\t※5:

<修改图书资料>0:

<返回主菜单>※\n");

printf("\t※※\n");

printf("\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n");

printf("\t\t请选择操作类型(0-5):

");

scanf("%d",&ch2);

switch(ch2)

{case1:

addbook();break;

case2:

delbook();break;

case3:

searchbook();break;

case4:

bookcount();getch();break;

case5:

modifybook();break;

case0:

break;

default:

printf("\n\t\t无效操作,按任意键返回...\n");getch();break;

}

}while(ch2!

=0);

}break;

case0:

break;

default:

printf("\n\t\t无效操作,按任意键返回...\n");getch();break;

}

}while(ch1!

=0);

2.3借书模块流程图

voidlendbook()

{//借书功能函数

HANDLEh=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(h,FOREGROUND_GREEN);

FILE*fp,*fp2;

inti,n;

intcardnum;

printf("\n\t\t请你输入你的卡号:

");

scanf("%d",&cardnum);

fp=fopen("card.txt","r");

for(i=0;fread(&card[i],sizeof(structcard),1,fp)!

=0;i++)否

{

if(card[i].cardnum==cardnum)

{是

n=i;

fclose(fp);

printf("\n\t\t请输入你要借阅的书的名字:

");

scanf("%s",student[n].lendbook);

fp=fopen("book.txt","r");否

for(i=0;fread(&book[i],sizeof(structbook),1,fp)!

=0;i++)

{

if(strcmp(book[i].bookname,student[n].lendbook)==0)是

{

if(book[i].bookcount==0)

{

printf("\t\t对不起,此书有人借出,请借其他书.按任意键返回...\n");

fclose(fp);

getch();

return;

}else{

//book[i].bookcount--;

fclose(fp);

}

fp=fopen("record.txt","a+");//以读写方式打开record.txt

student[n].cardnum=cardnum;

fwrite(&student[n],sizeof(structstudent),1,fp);

fclose(fp);

fp=fopen("book.txt","r");

fp2=fopen("booktemp.txt","w");

for(i=0;fread(&book[i],sizeof(structbook),1,fp)!

=0;i++)

{

if(strcmp(book[i].bookname,student[n].lendbook)==0)

{

book[i].bookcount--;

fwrite(&book[i],sizeof(structbook),1,fp2);

continue;

}

fwrite(&book[i],sizeof(structbook),1,fp2);

}

fclose(fp);

fclose(fp2);

fp=fopen("book.txt","w");

fp2=fopen("booktemp.txt","r");

for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!

=0;i++)

{

fwrite(&book[i],sizeof(structbook),1,fp);

}

fclose(fp);

fclose(fp2);

fopen("booktemp.txt","w");

fclose(fp2);

printf("\n\t\t借书完毕,按任意键返回...");

getch();

return;

}

}

printf("\n\t\t很抱歉,不存在这本书,按任意键返回...");

fclose(fp);

getch();

return;

}

}

printf("\n\t\t你的卡号不存在,请申请新卡,按任意键返回...");

fclose(fp);

getch();

}

2.4还书模块

voidreturnbook()/*还书函数*/

{

HANDLEh=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(h,FOREGROUND_GREEN);//设置字体颜色为绿色

FILE*fp,*fp2;/*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/

inti,temp;

intcardexit=0,bookexit=0;//卡号书籍是否存在(借阅)标志存在(借阅)为1不存在为0

intcardnum;

charlendbook[10];

printf("\n\t\t请你输入你的卡号:

");

scanf("%d",&cardnum);

fp=fopen("card.txt","r");/*读取卡号记录*/

for(i=0;fread(&card[i],sizeof(structcard),1,fp)!

=0;i++)/*for循环判断卡号是否存在*/

{

if(card[i].cardnum==cardnum)/*卡号存在,进入下一循环*/

{

cardexit=1;

temp=i;

fclose(fp);

printf("\n\t\t请输入你要还的书的名字:

");

scanf("%s",lendbook);

fp=fopen("record.txt","r");

for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!

=0;i++)/*判断是否借阅了输入的书*/

{

if(student[i].lendbook==lendbook)/*借阅了该书,进入下一循环,否则出错显示*/

{

bookexit=1;

fclose(fp);

fp=fopen("record.txt","r");

fp2=fopen("booktemp.txt","w");

for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!

=0;i++)

{

if(student[i].lendbook==lendbook)

{

continue;/*删除还掉的书的借书记录*/

}

fwrite(&student[i],sizeof(structstudent),1,fp2);/*写入原来没还的书的记录*/

}

fclose(fp);

fclose(fp2);

fp=fopen("record.txt","w");

fp2=fopen("booktemp.txt","r");

for(i=0;fread(&student[i],sizeof(structstudent),1,fp2)!

=0;i++)

{

fwrite(&student[i],sizeof(structstudent),1,fp);/*将借书记录信息写回*/

}

fclose(fp);

fclose(fp2);

fopen("booktemp.txt","w");/*清临时文件的记录*/

fclose(fp2);

fp=fopen("book.txt","r");

fp2=fopen("booktemp.txt","w");

for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!

=0;i++)/*将书的记录写入临时文件,防止因为修改信息破坏以前的记录*/

{

if(i==temp)

{

book[i].bookcount++;

fwrite(&book[i],sizeof(structbook),1,fp);/*将还的书的可借数量加1*/

continue;

}

fwrite(&book[i],sizeof(structbook),1,fp2);

}

fclose(fp);

fclose(fp2);

fp=fopen("book.txt","w");

fp2=fopen("booktemp.txt","r");

for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!

=0;i++)

{

fwrite(&book[i],sizeof(structbook),1,fp);/*将临时文件写回*/

}

fclose(fp);

fclose(fp2);

fopen("booktemp.txt","w");/*清临时文件*/

fclose(fp2);

printf("\n\t\t还书完毕,按任意键返回...\n");

}

}

fclose(fp);

}

}

fclose(fp);

if(cardexit==0)

printf("\n\t\t系统没此卡号,请和管理员联系,按任意键返回...\n");/*出错提示*/

elseif(bookexit==0)

printf("\n\t\t你没有借这本书,按任意键返回...\n");/*出错提示*/

getch();

}

2.5会员管理模块

会员管理有四个功能:

申请新卡、删除卡号、借书统计、卡号统计,分别对应以下四个函数:

voidaddcard()

{//增加新卡函数

FILE*fp;

inti=0,tempcard,temp=0;

fp=fopen("card.txt","a+");

printf("\n\t\t请输入卡号:

");

scanf("%d",&tempcard);

for(i=0;fread(&card[i],sizeof(structcard),1,fp)!

=0;i++)//判断卡号是否存在

if(tempcard==card[i].cardnum)

temp=1;

if(temp==1)//如果卡号存在,返回

{

printf("\n\t\t此卡号已经存在,按任意键返回...");

getch();

}

elseif(temp==0){//如果卡号不存在,继续下面操作

card[i].cardnum=tempcard;

printf("\n\t\t请输入学生姓名:

");

scanf("%s",card[i].studentname);

printf("\n\t\t请输入班级:

");

scanf("%s",&card[i].studentclass);

fwrite(&card[i],sizeof(structcard),1,fp);

fclose(fp);

printf("\n\t\t输入完毕,任意键返回...\n");

getch();

}

}

voiddelcard()

{//删除卡号记录函数

FILE*fp,*fp2;

inti;

intcardnum;

charchoice;

fp=fopen("card.txt","r");

fp2=fopen("booktemp.txt","w");

printf("\n\t\t提示:

如果你输入的卡号存在,系统自动删除该信息.");

printf("\n\t\t如果不存在,系统不做任何改动.");

printf("\n\t\t请输入你要删除的卡号:

");

scanf("%d",&cardnum);

for(i=0;fread(&card[i],sizeof(structcard),1,fp)!

=0;i++)

{

if(card[i].cardnum!

=cardnum)

{

fwrite(&card[i],sizeof(structcard),1,fp2);

}

}

fclose(fp);

fclose(fp2);

printf("\n\t\t是否真的要删除该卡?

删除后该书籍的所有信息将无法恢复

");

scanf("%s",&choice);

if(choice=='y'||choice=='Y')

{

fp=fopen("card.txt","w");

fp2=fopen("booktemp.txt","r");

for(i=0;fread(&card[i],sizeof(structcard),1,fp2)!

=0;i++)

{

fwrite(&card[i],sizeof(structcard),1,fp);

}

fclose(fp);

fclose(fp2);

fp2=fopen("booktemp.txt","w");

fclose(fp2);

printf("\t\t按任意键返回...\n");

getch();

}

else

{

printf("\t\t按任意键返回...\n");

getch();

}

}

intlendcount()

{//会员借书统计函数

FILE*fp;

inti,n=0;

fp=fopen("record.txt","r");

for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!

=0;i++)

{

printf("\t\t卡号:

%d借出的书籍:

%s\n",student[i].cardnum,student[i].lendbook);

n=n+1;

}

fclose(fp);

printf("\t\t目前共有%d本书借出\n",n);

printf("\t\t按任意键返回...\n");

getch();

returnn;

}

voidcardcount()

{//会员卡号统计函数

FILE*fp;

inti,n=0;

fp=fopen("card.txt","r");

printf("\t\t卡号姓名班级\n");

for(i=0;fread(&card[i],sizeof(structcard),1,fp)!

=0;i++)

{

printf("\n\t\t%-10d%-10s%-2s\n",card[i].cardnum,card[i].studentname,card[i].studentclass);

n=n+1;

}

fclose(fp);

printf("\n\t\t目前共有%d个会员\n",n);

printf("\t\t按任意键返回...\n");

getch();

}

2.6书籍管理模块

书籍管理模块有五个功能

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2