c語言圖書管理論文
c語言圖書管理論文是考評學(xué)生對所學(xué)專業(yè)知識綜合掌握水平的一種有效方式,但畢業(yè)論文的撰寫與指導(dǎo)環(huán)節(jié)存在各種各樣的問題.如果有一篇畢業(yè)論文的例文,那就容易多了。下面是學(xué)習(xí)啦小編為大家精心挑選的,希望大家喜歡!
c語言圖書管理論文篇1
課程名稱 c語 言 課 程 設(shè) 計(jì) 教師姓名 樊媛媛 本科生姓名 本科生學(xué) 本科生專業(yè)
所在院系
類別: 日期:
課程設(shè)計(jì)評語
注:1、無評閱人簽名成績無效;
2、必須用鋼筆或圓珠筆批閱,用鉛筆閱卷無效;
3、如有平時成績,必須在上面評分表中標(biāo)出,并計(jì)算入總成績。
目 錄
2
課程設(shè)計(jì)評語 ...................................................................................................................................... 1
目 錄.................................................................................................................................................... 2
................................................................................................................................ 3
................................................................................................................................ 3
.................................................................................................................................... 4
................................................................................................................................ 4
5.算法設(shè)計(jì) ........................................................................................................................................ 4
........................................................................................................................................ 5
7.程序運(yùn)行結(jié)果 .............................................................................................................................. 11
.................................................................................................. 14
.................................................................................................................. 15
............................................................................................................................................ 15
1.課程論文題目
圖書管理系統(tǒng)
2.程序設(shè)計(jì)思路
根據(jù)要求,圖書管理系統(tǒng)以文本文件存放在文件中,故需要提供文件的輸入、輸出等操作;還需要保持記錄以進(jìn)行刪除,查詢,借書,還書,退出,添加等等操作;另外還有鍵盤式旋轉(zhuǎn)菜單以實(shí)現(xiàn)功能選擇模塊。
3.功能模塊圖
系統(tǒng)功能模塊圖
4.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
先寫主函數(shù)main (),然后設(shè)計(jì)個功能選項(xiàng),用switch選擇,然后進(jìn)入不同模塊,進(jìn)行不同選擇,實(shí)現(xiàn)不同功能。每個圖書信息設(shè)置一個結(jié)構(gòu)體,將輸入信息存入文件,提供查詢功能,還有刪除功能以及借書還書功能。每運(yùn)行一功能后都返回主界面,方便再次選擇,還有設(shè)置退出模塊,方便退出。
5.算法設(shè)計(jì)
先定義結(jié)構(gòu)體數(shù)組struct books,然后設(shè)置主界面,主界面出現(xiàn)6個功能選項(xiàng),分
別是輸入sr()
、借書js()、還書hs()、刪除sc()、退出tc()、查詢cx().各模塊設(shè)計(jì)如下:
輸入模塊sr(),先調(diào)用文件eup,對其進(jìn)行讀取,然后增加,再對其進(jìn)行保存和調(diào)用。其中結(jié)構(gòu)體只輸入tsmc圖書名稱,tsbh圖書編號,dj單價,zz作者, 然后自動生成,czzt存在狀態(tài),姓名xm,學(xué)號xh,性別xb.
查詢模塊cx(),有選項(xiàng)圖書編號和圖書名稱,然后選擇,用if選擇,然后用for循環(huán)查找,當(dāng)輸入名稱與文件中的名稱相同時,便顯示此信息。
刪除模塊就是在查找功能的圖書后,選擇刪除,將strcpy將s[i+1]的值賦給s[i]。 借出模塊也是在查詢的基礎(chǔ)上,若s[i]的存在狀態(tài)為已借出,則顯示已借出,無法再借,若未借出,則將s[i]的存在狀態(tài)czzt變?yōu)橐呀璩?,然后輸入姓名,學(xué)號,性別,最后顯示出已借出。
還書模塊就是在查詢的基礎(chǔ)上,若s[i]的存在狀態(tài)為未借出,則無法歸還,若借出,則將存在狀態(tài)變?yōu)槲唇璩?,然后自動將姓名,學(xué)號,性別變?yōu)槌跏贾怠?/p>
退出模塊使flag=1,而在main就有bool flag 且main中已令main=0.這樣就實(shí)現(xiàn)了退出功能。
其中若輸入超過選項(xiàng)值后,都會顯示輸入錯誤,請重新輸入。若字符錯誤,程序就直接出現(xiàn)錯誤了。
6.程序代碼
#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<conio.h>
#define M 100
struct books
{
char tsmc[12];
int tsbh;
float dj;
char zz[12];
char czzt[12];
char xm[12];
char xb[12];
int xh;
}s[M];
int N;
bool flag;
int main ()
{
int sele;
flag=0;
sele=1;
void sr();
void cx();
void sc();
void js();
void hs();
void tc();
void jsh();
//system ("tsgl");
printf("\n\n");
printf(" ************************\n"); printf(" 1:輸入 2:查詢 3:刪除 \n"); printf(" 4:借書 5:還書 0:退出 \n"); printf(" ************************\n"); while(1)
{
printf("\n\n請輸入功能序號:"); scanf ("%d",&sele);
if(sele>=0 && sele<=5)
{
switch(sele)
{
case 1:sr();break;
case 2:cx();break;
case 3:sc();break;
case 4:js();break;
case 5:hs();break;
case 0:jsh();break;
}
if(flag)
break;
printf("\n\n");
printf(" ************************\n"); printf(" 1:輸入 2:查詢 3:刪除 \n"); printf(" 4:借書 5:還書 0:退出 \n"); printf(" ************************\n");
}
else
{
printf("輸入錯誤請?jiān)俅屋斎雦\n\n"); printf("\n\n");
printf(" ************************\n"); printf(" 1:輸入 2:查詢 3:刪除 \n"); printf(" 4:借書 5:還書 0:退出 \n"); printf(" ************************\n"); }
printf("\n\n讓任意鍵繼續(xù)\n");
}
//wr_file();
}
/******主函數(shù)***/
/*********輸入*********/
void sr()
{
int n,i;
N=0;
printf("可輸入的書本數(shù):");
scanf("%d",&n);
N=n+N;
printf("請輸入相關(guān)信息:\n");
for(i=1;i<=n;i++)
{
printf("圖書名稱:");
scanf("%s",s[N-n-1+i].tsmc);
printf("圖書編號:");
scanf("%d",&s[N-n-1+i].tsbh);
printf("單價:");
scanf("%f",&s[N-n-1+i].dj);
printf("作者:");
scanf("%s",&s[N-n-1+i].zz);
strcpy(s[N-n-1+i].czzt,"未借出");
strcpy(s[N-n-1+i].xm,"無");
}
}
/********查詢**********/
void cx()
{
int i,j[100]={-1},d,k,t=0;
char m[20];
printf("查詢:");
printf("1:圖書名稱
printf("\n\n請輸入查詢選項(xiàng):");
scanf("%d",&k);
if(k==1)
{
printf("請輸入圖書名稱:"); 2:圖書編號");
scanf("%s",m);
for(i=0;i<N;i++)
if(strcmp(m,s[i].tsmc)==0)
{
j[t]=i;
t=t+1;
}
}
else if(k==2)
{
printf("請輸入圖書編號:");
scanf("%d",&d);
for(i=0;i<N;i++)
if(d==s[i].tsbh)
{
j[t]=i;
t++;
}
}
if(j[0]==-1&&t==0)
printf("沒有找到!\n");
if(j[0]!=-1 && t!=0)
{
printf("\t圖書名稱 \t圖書編號 \t單價 \t作者 \t存在狀態(tài) \t借書人姓名 \t性別 \t學(xué)號\n");
for(i=0;i<t;i++)
printf("\t%s \t%d \t%f \t%s \t%s \t%s \t%s \t%d ", s[j[i]].tsmc,s[j[i]].tsbh,s[j[i]].dj,s[j[i]].zz,s[j[i]].czzt,s[j[i]].xm,s[j[i]].xb,s[j[i]].xh);
}
}
/********刪除模塊*********/
void sc()
{
int i,d,k,t=0;
char ms[20];
int ja=-1;
printf("查詢:");
printf("1:圖書名稱 2:圖書編號");
printf("\n\n請輸入查詢選項(xiàng):");
scanf("%d",&k);
if(k==1)
{
printf("請輸入圖書名稱:");
scanf("%s",ms);
for(i=0;i<N;i++)
if(strcmp(ms,s[i].tsmc)==0)
{
ja=i;
break;
}
}
else if(k==2)
{
printf("請輸入圖書編號:");
scanf("%d",&d);
for(i=0;i<N;i++)
if(d==s[i].tsbh)
{
ja=i;
break;
}
}
printf("確定刪除該圖書嗎?1表示Yes,其他No"); int p;
scanf("%d",&p);
if(p==1)
printf("Congratulations,刪除成功||\n");
if(ja!=-1 && p)
{
N=N-1;
for(i=ja;i<N;i++)
{
strcpy(s[i].tsmc,s[i+1].tsmc);
s[i].tsbh=s[i+1].tsbh;
s[i].dj=s[i+1].dj;
strcpy(s[i].zz,s[i+1].zz);
strcpy(s[i].czzt,s[i+1].czzt);
strcpy(s[i].xm,s[i+1].xm);
strcpy(s[i].xb,s[i+1].xb);
s[i].xh=s[i+1].xh;
}
}
else if(ja==-1)
printf ("沒有找到!\n");
}
/**********借書模塊***********/
void js()
{
int i,j[100]={-1},d,k,t=0;
char m[20];
printf("查詢:");
printf("1:圖書名稱
printf("\n\n請輸入查詢選項(xiàng):");
scanf("%d",&k);
if(k==1)
{
printf("請輸入圖書名稱:");
scanf("%s",&m);
for(i=0;i<N;i++)
if(strcmp(m,s[i].tsmc)==0)
{
j[t]=i;
t=t+1;
}
} 2:圖書編號");
else if(k==2)
{
printf("請輸入圖書編號:");
scanf("%d",&d);
for(i=0;i<N;i++)
if(d==s[i].tsbh)
{
j[t]=i;
t++;
}
}
if(j[0]==-1&&t==0)
printf("沒有找到!\n");
strcpy(s[j[i]].czzt,"已借出");
printf("此書已借出\n");
if(j[0]!=-1&&t!=0&&s[j[i]].czzt==" 未借出")
{
printf("%s %d %f %s %s %s %s %d ",
s[j[i]].tsmc,s[j[i]].tsbh,s[j[i]].dj,s[j[i]].zz,s[j[i]].czzt,s[j[i]].xm,s[j[i]].xb,s[j[i]].xh); }
printf("1:確定借閱 2:退出\n");
scanf("%d",&k);
switch(k)
{
case 1:printf("請輸入學(xué)號:\n");
scanf("%d",&s[j[i]].xh);
printf("請輸入姓名:\n");
scanf("%s",&s[j[i]].xm);
printf("請輸入性別:\n");
scanf("%s",&s[j[i]].xb);
strcpy(s[j[i]].czzt,"已借出");
printf("已借出,按任意鍵繼續(xù)\n");
//getch();
case 2:break;
}
}
/*************還書模塊***************/
void hs()
{
int i,j[100]={-1},d,k,t=0;
char m[20];
printf("查詢:");
printf("1:圖書名稱 2:圖書編號");
printf("\n\n請輸入查詢選項(xiàng):");
scanf("%d",&k);
if(k==1)
{
printf("請輸入圖書名稱:");
scanf("%s",&m);
for(i=0;i<N;i++)
if(strcmp(m,s[i].tsmc)==0)
{
j[t]=i;
t++;
break;
}
}
else if(k==2)
{
printf("請輸入圖書編號:");
scanf("%d",&d);
for(i=0;i<N;i++)
if(d==s[i].tsbh)
{
j[t]=i;
t++;
break;
}
}
if(t==0)
printf("沒有找到!\n");
else
{
printf("%s %f %s %s %s %s %d \n",
s[j[i]].tsmc,s[j[i]].dj,s[j[i]].zz,s[j[i]].czzt,s[j[i]].xm,s[j[i]].xb,s[j[i]].xh);
printf("1:確定歸還 2:退出\n");
int p;
scanf("%d",&p);
if(p==1)
{
strcpy(s[j[i]].czzt,"未借出");
strcpy(s[j[i]].xm,"無");
s[j[i]].xh=0;
printf("已歸還,按任意鍵繼續(xù)\n");
}
//getch();
}
}
/*************結(jié)束模塊***************/
void jsh()
{
flag=1;
}
7.程序運(yùn)行結(jié)果
11
12
13
各模塊均能執(zhí)行。
8.編程中遇到的困難及解決方法
14
做程序時,文件函數(shù)無法實(shí)現(xiàn),于是找了同學(xué)跟我講解,看書還有就是看例子等等,最終找出了個解決方案。還有系統(tǒng)最初運(yùn)行時有很多不盡人意的,比如我希望每次運(yùn)行后都出現(xiàn)主界面,這樣方便選擇。如果出現(xiàn)錯誤的話,要顯示出錯誤原因,并給出提示,我解決了幾個這樣的問題,比如借書時如果已借出就要顯示出“已借出,請重新選擇”,如果沒有,就顯示無法找到,并顯出主菜單,再次選擇。
9.總結(jié)心得及良好建議
對于程序的設(shè)計(jì),必須先理解c語言的一些知識,用起來才會得心應(yīng)手,最好之前就想好大致用什么算法去實(shí)現(xiàn)需要的程序。對于舉一反三的內(nèi)容不是用來抄的,我們必須要先對其理解,這樣才能寫好一個程序。程序中最復(fù)雜的感覺是調(diào)試,有時候自己有很多習(xí)慣性的錯誤真的很難找到,所有要形成好的習(xí)慣。還有就是要養(yǎng)成好的思維,要多練習(xí),不能眼高手低。
10.致謝
c語言圖書管理論文篇2
學(xué) 號:
班 級:計(jì)
姓 名:陳
完成時間:
科083 陽 光
一、 需求分析
1. 依據(jù)題目要求以及現(xiàn)實(shí)中圖書館的需求,應(yīng)將該系統(tǒng)分為兩大模塊:圖書管理和會
員管理。圖書管理模塊中包括對圖書的增加、修改、刪除、查詢、統(tǒng)計(jì)等操作,以及對圖書借入借出服務(wù)。會員管理包括對會員卡號的申請、刪除、統(tǒng)計(jì)等操作。 2. 界面應(yīng)該具有友善、直觀、易操作等特點(diǎn),本系統(tǒng)采用數(shù)字輸入選擇操作。 二、 概要設(shè)計(jì) 1. 整體設(shè)計(jì)
經(jīng)過需求分析,本系統(tǒng)分為兩大模塊:書籍管理模塊和會員管理模塊。但是從易用性方面考慮,將書籍管理模塊中的借書和還書模塊放到主界面中。結(jié)構(gòu)圖如下所示:
2. 詳細(xì)設(shè)計(jì)
2.1結(jié)構(gòu)體設(shè)計(jì)
流程圖 struct student /*定義會員類型,用于存放借出的書籍*/ {
int cardnum; //卡號
char lendbook[10]; //借書數(shù)組 最多借書十本 }student[1000];
struct book /*定義書的類型*/ { int booknum; //書號 char bookname[20]; //書名 char author[10]; //作者
int bookcount; //書的剩余數(shù)量 }book[1000];
struct card /*借書卡的數(shù)據(jù)類型*/
{
int cardnum; //卡號
char studentname[10];//會員姓名
char studentclass[10]; //會員班級
}card[1000];
2.2 主函數(shù)
主函數(shù)要求設(shè)計(jì)比較簡潔,只提供設(shè)輸入,處理和輸出部分的函數(shù)調(diào)用。其中各功能模塊用菜單方式選擇。
HWND hwnd=GetForegroundWindow();
SetWindowText(hwnd,"★圖 書 管 理 系 統(tǒng)★");
int ch1,ch2,ch3;
do
{ SetConsoleTextAttribute(h,FOREGROUND_RED);//設(shè)置字體顏色為紅色
printf("\n\t\t ★歡★迎★進(jìn)★入★圖★書★管★理★系★統(tǒng)★\n\n");
printf("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("\t ※ ※\n"); printf("\t ※ ★ 圖 書 管 理 系 統(tǒng) ★ ※\n"); printf("\t ※ ※\n"); printf("\t ※ 1:<借書系統(tǒng)> 2:<還書系統(tǒng)> ※\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)
{ case 1:lendbook();break;
case 2:returnbook();break;
case 3:{
do
{SetConsoleTextAttribute(h, FOREGROUND_GREEN);//設(shè)置字體顏色為綠色
printf("\n\n");
printf("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("\t ※ ※\n");
printf("\t ※ ★ 歡 迎 進(jìn) 入 會 員 管 理 系 統(tǒng) ★ ※\n");
printf("\t ※ ※\n");
printf("\t ※ 1:<申請新卡> 2:<刪除卡號> ※\n"); printf("\t ※ 3:<借書統(tǒng)計(jì)> 4:<會員統(tǒng)計(jì)> ※\n"); printf("\t ※ 0:<返回> ※\n");
printf("\t ※ ※\n");
printf("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n");
printf("\t\t請選擇操作類型(0-4):");
scanf("%d",&ch3);
switch(ch3)
{ case 1:addcard();break;
case 2:delcard();break;
case 3:lendcount();break;
case 4:cardcount();break;
case 0:break;
default:printf("\n\t\t無效操作,按任意鍵返回...\n");getch();break; } }while(ch3!=0);
}break;
case 4:{
do {
SetConsoleTextAttribute(h, FOREGROUND_GREEN);//設(shè)置字體顏色為綠色
printf("\n\n");
printf("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("\t ※ ※\n"); printf("\t ※ ★ 歡 迎 進(jìn) 入 書 籍 管 理 系 統(tǒng) ★ ※\n"); printf("\t ※ ※\n"); printf("\t ※ 1:<增加圖書> 2:<刪除圖書> ※\n"); printf("\t ※ 3:<查詢圖書> 4:<書籍統(tǒng)計(jì)> ※\n"); printf("\t ※ 5:<修改圖書資料> 0:<返回主菜單> ※\n"); printf("\t ※ ※\n"); printf("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n");
printf("\t\t請選擇操作類型(0-5):");
scanf("%d",&ch2);
switch(ch2)
{ case 1:addbook();break;
case 2:delbook();break;
case 3:searchbook();break;
case 4:bookcount();getch();break;
case 5:modifybook();break;
case 0:break;
default:printf("\n\t\t無效操作,按任意鍵返回...\n");getch();break;
}
}while(ch2!=0);
}break;
case 0:break;
default:printf("\n\t\t無效操作,按任意鍵返回...\n");getch();break;
}
}while(ch1!=0);
2.3 借書模塊
void lendbook() { //借書功能函數(shù)
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(h, FOREGROUND_GREEN); FILE *fp,*fp2;
int i,n;
int cardnum;
printf("\n\t\t請你輸入你的卡號: "); scanf("%d",&cardnum); fp=fopen("card.txt","r"); for(i=0;fread(&card[i],sizeof(struct card),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"); {
回...\n");
{ if(book[i].bookcount==0) { printf("\t\t對不起,此書有人借出,請借其他書.按任意鍵返 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(struct student),1,fp); fclose(fp);
fp=fopen("book.txt","r"); fp2=fopen("booktemp.txt","w"); for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) { if(strcmp(book[i].bookname,student[n].lendbook)==0) { book[i].bookcount--; fwrite(&book[i],sizeof(struct book),1,fp2); continue; } fwrite(&book[i],sizeof(struct book),1,fp2); } fclose(fp); fclose(fp2); fp=fopen("book.txt","w"); fp2=fopen("booktemp.txt","r"); for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++) { fwrite(&book[i],sizeof(struct book),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 還書模塊
void returnbook() /*還書函數(shù)*/
{
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(h, FOREGROUND_GREEN);//設(shè)置字體顏色為綠色
FILE *fp,*fp2; /*定義兩個文件指針,fp2用于修改數(shù)據(jù)時設(shè)立臨時文件用,防止數(shù)據(jù)遭破壞*/
int i,temp;
int cardexit=0,bookexit=0;//卡號 書籍是否存在(借閱)標(biāo)志 存在(借閱)為1 不存在為0
int cardnum;
char lendbook[10];
printf("\n\t\t請你輸入你的卡號: ");
scanf("%d",&cardnum);
fp=fopen("card.txt","r"); /*讀取卡號記錄*/ for(i=0;fread(&card[i],sizeof(struct card),1,fp)!=0;i++) /*for循環(huán)判斷卡號是否存在*/ { if(card[i].cardnum==cardnum) /*卡號存在,進(jìn)入下一循環(huán)*/ { 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(struct student),1,fp)!=0;i++) /*判斷是否借閱了輸入的書*/
{
if(student[i].lendbook==lendbook) /*借閱了該書,進(jìn)入下一循環(huán),否則出錯顯示*/
{
bookexit=1;
fclose(fp);
fp=fopen("record.txt","r");
fp2=fopen("booktemp.txt","w");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)
{
if(student[i].lendbook==lendbook)
{
continue; /*刪除還掉的書的借書記錄*/
}
fwrite(&student[i],sizeof(struct student),1,fp2); /*寫入原來沒還的書的記錄*/
}
fclose(fp);
fclose(fp2);
fp=fopen("record.txt","w");
fp2=fopen("booktemp.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp2)!=0;i++)
{ fwrite(&student[i],sizeof(struct student),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(struct book),1,fp2)!=0;i++) /*將書的記錄寫入臨時文件,防止因?yàn)樾薷男畔⑵茐囊郧暗挠涗?/
{
if(i==temp)
{
book[i].bookcount++;
fwrite(&book[i],sizeof(struct book),1,fp); /*將還的書的可借數(shù)量加1*/
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("booktemp.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),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系統(tǒng)沒此卡號,請和管理員聯(lián)系,按任意鍵返回...\n");/*出錯提示*/
else if(bookexit==0)
printf("\n\t\t你沒有借這本書,按任意鍵返回...\n"); /*出錯提示*/ getch();
}
2.5 會員管理模塊
會員管理有四個功能:申請新卡、刪除卡號、借書統(tǒng)計(jì)、卡號統(tǒng)計(jì),分別對應(yīng)以下四個函數(shù):
void addcard()
{ //增加新卡函數(shù)
FILE *fp;
int i=0,tempcard,temp=0;
fp=fopen("card.txt","a+");
printf("\n\t\t請輸入卡號:"); scanf("%d",&tempcard); for(i=0;fread(&card[i],sizeof(struct card),1,fp)!=0;i++) //判斷卡號是否存在 if(tempcard==card[i].cardnum) temp=1; if(temp==1) //如果卡號存在,返回 { printf("\n\t\t此卡號已經(jīng)存在,按任意鍵返回..."); getch(); } else if(temp==0){ //如果卡號不存在,繼續(xù)下面操作 card[i].cardnum=tempcard; printf("\n\t\t請輸入學(xué)生姓名:"); scanf("%s",card[i].studentname);
printf("\n\t\t請輸入班級:");
scanf("%s",&card[i].studentclass);
fwrite(&card[i],sizeof(struct card),1,fp);
fclose(fp);
printf("\n\t\t輸入完畢,任意鍵返回...\n");
getch();
}
}
void delcard()
{ //刪除卡號記錄函數(shù)
FILE *fp,*fp2;
int i;
int cardnum;
char choice;
fp=fopen("card.txt","r");
fp2=fopen("booktemp.txt","w");
printf("\n\t\t提示:如果你輸入的卡號存在,系統(tǒng)自動刪除該信息.");
printf("\n\t\t如果不存在,系統(tǒng)不做任何改動."); printf("\n\t\t請輸入你要刪除的卡號: "); scanf("%d",&cardnum); for(i=0;fread(&card[i],sizeof(struct card),1,fp)!=0;i++) { if(card[i].cardnum!=cardnum) { fwrite(&card[i],sizeof(struct card),1,fp2); } } fclose(fp); fclose(fp2); printf("\n\t\t是否真的要刪除該卡?刪除后該書籍的所有信息將無法恢復(fù)<Y/N>:"); 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(struct card),1,fp2)!=0;i++) { fwrite(&card[i],sizeof(struct card),1,fp); } fclose(fp); fclose(fp2); fp2=fopen("booktemp.txt","w"); fclose(fp2); printf("\t\t按任意鍵返回...\n"); getch(); } else {
printf("\t\t按任意鍵返回...\n");
getch();
}
}
int lendcount()
{ //會員借書統(tǒng)計(jì)函數(shù)
FILE *fp;
int i,n=0;
fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),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();
return n;
}
void cardcount()
{
//會員卡號統(tǒng)計(jì)函數(shù) FILE *fp; int i,n=0; fp=fopen("card.txt","r");
printf("\t\t卡號 姓名 班級\n");
for(i=0;fread(&card[i],sizeof(struct card),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書籍管理模塊
書籍管理模塊有五個功能:增加圖書、刪除圖書、查詢圖書、書籍統(tǒng)計(jì)、修改圖書資料。分別對應(yīng)下面五個函數(shù):
void addbook()
{
//增加新書函數(shù) FILE *fp; int i=1,temp=0,booktemp; char choice='y'; fp=fopen("book.txt","a+"); while(choice=='y'||choice=='Y') { printf("\n\t\t請輸入書的序號:"); scanf("%d",&booktemp); for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) //判斷卡號是否存在 if(booktemp==book[i].booknum) { temp=1;
choice='n'; } // scanf("%d",&book[i].booknum); if(temp==1) { printf("\n\t\t此書號已經(jīng)存在,按任意鍵返回..."); getch(); } else { printf("\n\t\t請輸入書名:"); scanf("%s",book[i].bookname); printf("\n\t\t請輸入書的作者:"); scanf("%s",book[i].author); printf("\n\t\t請?jiān)O(shè)定書可借數(shù)量:"); scanf("%d",&book[i].bookcount); fwrite(&book[i],sizeof(struct book),1,fp);
printf("\n\t\t是否要輸入下本書(Y or N):");
scanf("%s",&choice);
}
}
fclose(fp);
}
void delbook()
{ //刪除圖書函數(shù)
FILE *fp,*fp2;
int i;
char bookname[10],choice;
fp=fopen("book.txt","r");
fp2=fopen("booktemp.txt","w");
printf("\n\t\t提示:如果你輸入的書名存在,系統(tǒng)自動刪除該信息!\n\t\t如果不存在,系統(tǒng)不做任何改動!");
printf("\n\t\t請輸入你要刪除的書名:");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(bookname,book[i].bookname)!=0)
{
fwrite(&book[i],sizeof(struct book),1,fp2);
}
}
fclose(fp);
fclose(fp2);
printf("\n\t\t是否真的要刪除該書籍?刪除后該書籍的所有信息將無法恢復(fù)<Y/N>:"); scanf("%s",&choice);
if(choice=='y'||choice=='Y') { fp=fopen("book.txt","w"); fp2=fopen("booktemp.txt","r"); for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++) { fwrite(&book[i],sizeof(struct book),1,fp); } fclose(fp); fclose(fp2); fp2=fopen("booktemp.txt","w"); fclose(fp2);
printf("\n\t\t按任意鍵返回...\n");
getch();
}
else
{
printf("\n\t\t按任意鍵返回...\n");
getch();
}
}
void searchbook()
{ //圖書查詢系統(tǒng)函數(shù)
int ch5;
do
{ HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(h, FOREGROUND_GREEN);//設(shè)置字體顏色為綠色 printf("\n\t\t1:<按書名查找>");
printf("\t\t2:<按作者查找>");
printf("\n\t\t3:<按書號查找>");
printf("\t\t0:<返回主菜單>");
printf("\n\n\t\t請輸入要選擇的操作(0-3):");
scanf("%d",&ch5);
switch(ch5)
{
case 1:findbook();getch();break;
case 2:findbook1();getch();break;
case 3:
{findbook2();
getchar();
}break;
case 0: break;
} default:printf("\t\t無效操作,按任意鍵返回...\n");getch();break; } }while(ch5!=0);
int findbook() //findbook1() findbook2()分別為按作者和書號查詢,和此函數(shù)類似,再次不
{ //按書名查閱書籍信息 //在此不再一一列出,具體請參考源程序
FILE *fp;
char bookname[10];
int i;
fp=fopen("book.txt","r");
printf("\n\t\t請輸入你要查找的書名:");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(bookname,book[i].bookname)==0)
{
if(book[i].bookcount!=0)
{
printf("\n\t\t這本書的詳細(xì)資料是:%d %s %s 此書現(xiàn)在還可借。\n\t\t按任意鍵返回...\n",book[i].booknum,book[i].bookname,book[i].author);
}
else {
printf("\n\t\t這本書已經(jīng)借完!\n");
fclose(fp);
return 0;
}
fclose(fp);
return 0;
}
}
printf("\n\t\t沒有你要查詢的書籍,按任意鍵返回...\n");
fclose(fp);
return 0;
}
void bookcount()
{ //書籍統(tǒng)計(jì)函數(shù)
FILE *fp;
int i,n=0;
fp=fopen("book.txt","r");
printf("\t\t書號 書名 作者 剩余數(shù)量\n");
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(book[i].booknum!=0&&strlen(book[i].bookname)!=0&&strlen(book[i].author)!=0) {
printf("\t\t%-10d%-20s%-10s%-2d\n",book[i].booknum,book[i].bookname,book[i].author,book[i].bookcount);
n=n+1;
}
}
fclose(fp);
printf("\n\t\t目前共有%d本書",n);
printf("\t\t按任意鍵返回...\n");
}
void modifybook()
{ //修改圖書信息
FILE *fp,*fp2;
char bookname[20],choice;
int i;
fp=fopen("book.txt","r");
fp2=fopen("booktemp.txt","w");
printf("\n\t\t請你輸入要修改的書籍的書字:");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
//printf("測試");
if(strcmp(bookname,book[i].bookname)==0)
{
printf("\t\t你所要修改的書的資料如下,請選擇你要修改的內(nèi)容\n"); printf("\t\t序號:〈%d〉 書名:〈%s〉 作者:〈%s〉
\n",book[i].booknum,book[i].bookname,book[i].author);
printf("\t\t1:修改書的序號\n");
printf("\t\t2:修改書名\n");
printf("\t\t3:修改作者\(yùn)n");
printf("\t\t4: 修改書的借出狀態(tài)\n");
printf("\t\t請輸入選擇的操作(1-4):");
scanf("%s",&choice);
switch(choice)
{
case '1':
{
printf("\n\t\t請輸入新的序號: ");
scanf("%d",&book[i].booknum);
fwrite(&book[i],sizeof(struct book),1,fp2);
}break;
case '2':
} { printf("\n\t\t請輸入新的書名: "); scanf("%s",book[i].bookname); fwrite(&book[i],sizeof(struct book),1,fp2); }break; case '3': { printf("\n\t\t請輸入書的作者: "); scanf("%s",book[i].author); fwrite(&book[i],sizeof(struct book),1,fp2); }break; case '4': { printf("\n\t\t請輸入書剩余數(shù)量: "); scanf("%d",book[i].bookcount ); fwrite(&book[i],sizeof(struct book),1,fp2); }break; default:printf("\t\t無效操作\n");break; } continue; } fwrite(&book[i],sizeof(struct book),1,fp2); } fclose(fp); fclose(fp2); fp=fopen("book.txt","w"); fp2=fopen("booktemp.txt","r"); for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++) { fwrite(&book[i],sizeof(struct book),1,fp); } fclose(fp); fclose(fp2); fp2=fopen("booktemp.txt","w"); fclose(fp2); printf("\t\t很抱歉,不存在要修改的圖書!\n"); getchar();
三、 編碼測試
1. 主界面
2. 會員管理界面
從主界面選擇操作類型3 進(jìn)入會員管理界面:
3.書籍管理界面
從主界面選擇操作類型4進(jìn)入書籍管理界面:
注:由于篇幅有限,其他功能不再一一截圖,更多詳細(xì)情況請參考附件。
四、 設(shè)計(jì)總結(jié)
經(jīng)過幾天的努力,圖書管理系統(tǒng)總算可以正常運(yùn)行了,功能也算基本完善。實(shí)習(xí)過程中也遇到了很多的困難,但通過圖書館和上網(wǎng)查閱資料,總算得以一一解決。最后感謝我的隊(duì)友安龍飛和蘭其海的對此的大力幫助。
五、 源碼
請參考附件