程序設(shè)計(jì)大作業(yè)代碼及說明書-圖書銷售管理系統(tǒng)_第1頁
程序設(shè)計(jì)大作業(yè)代碼及說明書-圖書銷售管理系統(tǒng)_第2頁
程序設(shè)計(jì)大作業(yè)代碼及說明書-圖書銷售管理系統(tǒng)_第3頁
程序設(shè)計(jì)大作業(yè)代碼及說明書-圖書銷售管理系統(tǒng)_第4頁
程序設(shè)計(jì)大作業(yè)代碼及說明書-圖書銷售管理系統(tǒng)_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

程序設(shè)計(jì)說明書

(圖書銷售管理系統(tǒng))

圖書銷售系統(tǒng):程序代碼

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

structbook

charISBN[50];//ISBN號

charname[50];〃圖書名稱

floatprice;〃價(jià)格

intstoreO;〃最初書店中的庫

intstore;〃當(dāng)前存貨量

intsale;〃銷售量

chardiscount;〃是否促銷

structbook*next;〃單鏈表中指向下

一結(jié)構(gòu)體首地址的指針

);

intn;〃圖書數(shù)量,需要在

錄入時(shí)從文件第一行讀取

staticstructbook*bklist,bk[100];〃圖書單鏈表的首地址,和圖書數(shù)組

intjudge(chara[])//要考慮到輸入非數(shù)字的的影響,若輸入的是正確的非

負(fù)整數(shù)則返回該數(shù),否則返回-L在main函數(shù)中,將輸入容轉(zhuǎn)化為字符串

(

inti,b,trns;

if(a[O]=='O'&&a[l]!='\O')

(

printf("請輸入正整數(shù)或0。");

return-1;

}//I:排出輸入容中第一個(gè)字符為'O',之后還有別的容的情況

for(i=0;a[i]!='\0';i++)

(

b=a[i];

if((b<48)||(b>57))

(

printf(”請輸入正整數(shù)或0o\n\n");

return-1;

}//2:若含數(shù)字外的字符,則返回,說明用戶輸入有

)

甘ns=atoi(a);〃排除了1、2的情況后,將字符串轉(zhuǎn)化為整型數(shù),將該整型數(shù)返

returntrns;

)

voidshow(structbook*k)〃用于顯示圖書的相關(guān)信息

(

fprintf(stdout,"%-25s%-10.2f%-5d%-10d%-5c%-30s\n\n",k->ISBN,k->price,k->

store,k->sale,k->discount,k->name);

)

voidordershow(constcharorder[])〃用于提示用戶當(dāng)前所在的命令操作界面

printf("\n\n---------------------------%s---------------------------------\n\n\n",or

der);

)

voidcolumn(void)〃用于顯示圖書信息表格的表頭

(

printf("ISBN號價(jià)格庫存銷售量是否促銷書名\n");

structbook*create(FILE*p)

(

structbook*mylist,*tempnode,*cursor;inti;

mylist=(structbook*)malloc(sizeof(structbook));

if(mylist==NULL)

{printf("errorl");exit(l);)

mylist->next=NULL;

cursor=mylist;

fscanf(p,"%cT,&n);

for(i=0;i<n;i++)

(

tempnode=(structbook*)malloc(sizeof(structbook));

if(tempnode二二NULL)

{printf("errorl");exit(l);}

tempnode->next=NULL;

fscanf(pz"%s%f%d%d%c",tempnode->ISBNl&(tempnode->price)z&(tempnode-

>storeO),&(tempnode->store)/&(tempnode->discount));

fgets(tempnode->name/30,p);

tempnode->sale=tempnode->storeO-tempnode->store;

strcpy(bk[i].ISBN/tempnode->ISBN);strcpy(bk[i].name/tempnode->name);

bk[i].price=tempnode->price;

bk[i].storeO=tempnode->storeO;bk[i].store=tempnode->store;

bk[i].sale=tempnode->sale;

bk[i].discount=tempnode->discount;〃容錄入數(shù)組,數(shù)組是全局的,無需

返回

cursor->next=tempnode;

cursor=tempnode;

)〃創(chuàng)建單鏈表,對數(shù)據(jù)進(jìn)行錄入,同時(shí)錄入數(shù)組

cursor=NULL;tempnode=NULL;

returnmylist;〃返回單鏈表首地址

)

voidfreellist(structbook*head)

(

structbook*ptr;

while(head!=NULL)//遍歷鏈表

(

ptr=head;

head=head->next;//指向下一節(jié)點(diǎn)

ptr->next=NULL;

free(ptr);//釋放結(jié)構(gòu)體

)

)

intsearch(char*1)

(

structbook*booksearch;

for(booksearch=bklist->next;booksearch!=NULL;booksearch=booksearch->next)

if(strcmp(l,booksearch->ISBN)==0)

column();

show(booksearch);

booksearch=NULL;

return0;

)

)

printf("抱歉,沒有找到相應(yīng)的圖書。\n\n");

booksearch=NULL;

return1;

}〃利用單鏈表進(jìn)行ISBN查找

voidkeyword(chara[])

(

inti,j,k;

intlength/lengthi/flag=O/flagl=O,temp/tempO;

length=strlen(a);〃關(guān)鍵詞的長度

flag=O;flagl=O;

column();

for(i=0;i<n;i++)

lengthi=strlen(bk[i].name);

for(j=0;j+length<lengthi;j++)

for(k=0;k<length;k++)

(

temp=a[k];tempO=bk[i].name[j+k];

flag+=(tempO-temp)*(tempO-temp);

)

if(flag==O)

(

flagl++;show(&bk[i]);break;

)

elseflag=O;

)

)

if(flagl==O)printf("抱歉,沒有找到相應(yīng)的圖書。\n\n");

}〃關(guān)鍵詞查找:查找結(jié)果為書名中包含查找容(作為整體)的相應(yīng)書籍的全部容

voidbubblesort(void)

(

inti;

structbook*a,*b,*c;

ordershow(,銷量由高到低排序");

for(i=0;i<n;i++)

for(a=bklist;a->next->next!=NULL;a=a->next)

(

b=a->next;c=b->next->next;

if(b->sale<b->next->sale)

(

a->next=b->next;

a->next-〉next=b;

b->next=c;

)

)

column();

for(c=bklist->next;c!=NULL;c=c->next)

(

show(c);

)

c=NULL;b=NULL;a=NULL;

)〃用單鏈表進(jìn)行冒泡排序,打印出按照銷量由高到低的排行榜

voidselectsort(structbooka[])

intijmin;

structbook*pb[50],*tempb;

ordershow("價(jià)格由低到高排行)

for(i=0;i<n;i++)

pb[i]=&a[i];

for(i=0;i<n;i++)

(

min=i;

for(j=i;j<n;j++)

(

if(pb[min]->price>pb[j]->price)

min=j;

)

tempb=pb[i];pb[i]=pb[min];pb[min]=tempb;

)

column();

for(i=0;i<n;i++)

show(pb[i]);

tempb=NULL;

for(i=0;i<49;i++)

pb[i]=NULL;

)〃對圖書數(shù)組進(jìn)行選擇排序,打印出圖書價(jià)格由低到高的排行榜

voidinsertsort(structbooka[])

intij;

structbook*tempcf*pc[50];

ordershow(”庫存由低到高排行)

for(i=0;i<n;i++)

pc[i]=&a[i];

for(i=l;i<n;i++)

(

tempc=pc[i];

for(j=i-l;(j>=0)&&(tempc->store<pc[j]->store);j-)

pc[j+l]=pc[j];

pc[j+l]=tempc;

)

column();

for(i=0;i<n;i++)

show(pc[i]);

tempc=NULL;

for(i=0;i<49;i++)

pc[i]=NULL;

)〃對圖書數(shù)組進(jìn)行選擇排序,打印出圖書庫存由低到高的排行榜

voidmain()

FILE*p;

inti,op,operat,booknum;

charISBN0[100],buy[100],back[100],str[100];〃從左到右依次為:查詢圖書的ISBN

碼,購買圖書的ISBN碼,退還圖書的ISBN碼,接受用戶輸入的操作命令的字符數(shù)組。

void(*oper[2])(structbooka[]);〃指向函數(shù)的指針,用于控制選擇排序和插入排序

函數(shù)

structbook*bookp;〃用于單鏈表操作的指針

if((p=fopen("圖書.txt","r"))==NULL)〃打開文件,為了防止中途關(guān)閉程序?qū)е挛?/p>

件截為0的情況,首先以可讀式打開

(

printf("文件打開失敗!\n");return;

)〃判斷文件是否打開成功

bklist=create(p);〃創(chuàng)建了一個(gè)單鏈表,對磁盤文件進(jìn)行存儲(chǔ)

rewind(p);〃文件指針返回到文件開頭,便于之后的操作

/〃〃〃/〃/〃/〃〃〃/〃/〃/〃〃初始選擇模式〃〃/〃/〃〃〃/〃/〃/〃〃〃/〃/〃/〃/〃//

while(l)

(

printf("\n你好,歡迎使用圖書銷售管理系統(tǒng),請選擇您想要進(jìn)行的操作\n\n圖書查

詢請按1;圖書排行請按2;圖書購買請按3;退貨請按4;\n\n退出程序請按0或者直接

按回車鍵。\n\n輸入數(shù)字后以回車鍵結(jié)束\n");

fflush(stdin);gets(str);

op=judge(str);

if(op==-l)

continue;〃如果有非數(shù)字字符,繼續(xù)循環(huán),重新輸入

if(op==0)〃輸入0或者直接按回車時(shí),op=0,結(jié)束程序

(

printf("\n\n感您的使用!\n\n\n");break;

)〃程序出口

if((op!=l)&&(op!=2)&&(op!=3)&&(op!=4)&&(op!=0))〃輸入整數(shù)要為

0,1,2,3,4中的一個(gè)

(

printf("輸入操作有誤,請輸入0-4的某一個(gè)數(shù)字,以回車鍵結(jié)束\n\n");

continue;

)〃用于處理用戶輸入中可能出現(xiàn)的錯(cuò)誤,這一部分可以實(shí)現(xiàn)的是:當(dāng)

用戶只有輸入0,123,4中的一個(gè)數(shù)字再回車或者直接回車時(shí),才可以跳出循環(huán)

///〃〃/〃/〃//〃/〃/〃/〃〃〃/〃/圖書查詢〃//〃〃///〃〃/〃/〃/〃/〃〃〃//〃〃//〃/〃/〃//

while(op==l)

(

ordershow("圖書查詢");

printf(”請輸入圖書的ISBN號(若查詢所有圖書信息請按0,若使用關(guān)鍵詞查

找請按l)\n輸入完成后以回車鍵結(jié)束。\n");

fflush(stdin);gets(ISBNO);〃進(jìn)行圖書查詢的操

if(strcmp(ISBNO,"O")==O)

ordershow("所有圖書信息)

column();

for(i=0;i<n;i++)

show(&bk[i]);

)〃輸出全部圖書信息

elseif(strcmp(ISBN0,"1")==0)

(

ordershow("關(guān)鍵詞查詢");

printf(”請輸入關(guān)鍵詞:(直接按回車鍵可查詢所有圖書)\n");

fflush(stdin);gets(str);

keyword(str);〃進(jìn)行關(guān)鍵詞查詢

)〃輸入?;騎時(shí),程序認(rèn)為是進(jìn)行全部圖書查詢或關(guān)鍵詞查

else

(

ordershow("ISBN查找");

search(ISBNO);//ISBN查詢

while(l)

printf("繼續(xù)查詢請按1;結(jié)束查詢請按0或者直接按回車鍵。輸入

數(shù)字后以回車鍵結(jié)束。\n");

fflush(stdin);gets(str);

operat=judge(str);

if(((operat-l)==0)||(operat==O))break;

printf(”輸入容有誤\n\n");

〃判斷輸入是否正確,正確輸入后才可以跳出循環(huán)。

if(operat==l)

operat=0;continue;〃繼續(xù)查詢

if(operat==0)break;〃退出查詢

//〃/〃/〃/〃〃〃/〃/〃/〃/〃//〃//排行查詢〃/〃/〃/〃/〃/〃/〃/〃〃/〃/〃//

while(op==2)

ordershow("排行查詢)

printf(”按銷量由高到低排序請按1;按價(jià)格由低到高排序請按2;按庫存

量由低到高排序請按3;\n\n結(jié)束排行查詢請按0或者直接按回車鍵;輸入數(shù)字后以回車

鍵結(jié)束。\n\n");

fflush(stdin);gets(str);

operat=judge(str);

if(operat==-l)continue;

if((operat!=l)&&(operat!=2)&&(operat!=3)&&(operat!=0))

(

printf("輸入操作有誤,請輸入0-3的某一個(gè)整數(shù),輸入數(shù)字后

以回車鍵結(jié)束。\n\n");

continue;

)〃輸入錯(cuò)誤提醒

if(operat==0)break;

if(operat==l)

(

bubblesortO;〃冒泡排序

)

else

(

oper[0]=selectsort;

oper[l]=insertsort;〃利用指向函數(shù)的

指針控制

oper[operat-2](bk);

)

while(l)

printf("繼續(xù)排行查詢請按1;結(jié)束排行查詢請按0或者直接按

回車鍵。輸入數(shù)字后以回車鍵結(jié)束\n");

fflush(stdin);gets(str);

operat=judge(str);

if(operat==-l)continue;

if(((operat-l)==0)||(operat==0))break;

printf("輸入容有誤,請輸入0-1的某一個(gè)整數(shù),輸入數(shù)字后以

回車鍵結(jié)束。\n\n");

)〃判斷輸入是否正確,正確輸入后才可以跳出此循環(huán)。

if(operat==l)continue;〃繼續(xù)查詢排行

if(operat==0)break;〃結(jié)束查詢排行

}

///〃/〃/〃/〃/〃/〃〃〃〃/〃/〃購買圖書////〃/〃/〃/〃/〃/〃/〃/〃/〃/〃/〃//

while(op==3)

(

ordershow("購買圖書");

printf("請輸入您需要購買圖書的ISBN號,以回車鍵結(jié)束;結(jié)束購

買請輸入0,以回車結(jié)束。\n");

fflush(stdin);gets(buy);

if(strcmp(buy,"O")==O)break;

for(i=0;i<n;i++)

(

if(strcmp(bk[i].ISBN,buy)==O)break;

)〃判斷判斷存書的ISBN碼中是否與有輸入的ISBN碼

相同的

if(i==n)

(

printf("您所查找的圖書不存在,請重新輸入

\n\n");continue;

)〃沒有則1=11,重新輸入

if(i<n)

(

column();

show(&bk[i]);〃有該圖書則將該圖書的信息打印在屏幕

while(l)

(

printf("繼續(xù)購買請輸入1,返回上一界面請輸入

0或者直接按回車鍵,以回車鍵結(jié)束\n");

fflush(stdin);gets(str);

operat=judge(str);

if(operat==-l)continue;

if(operat!=l&&operat!=0)

(

printf("請輸入0-1的數(shù)字以回車鍵結(jié)

束\n\n");

continue;〃輸入錯(cuò)誤容的提示

)

elsebreak;

)

if(operat==0)continue;〃返回購買圖書的ISBN輸入

界面

)

while(l)

(

if(bk[i].store==0)

(

printf("圖書已售空,請購買其他排行靠前的圖書\n\n");break;

)〃圖書售空提示

if(bk[i].store<4)〃圖書余量較少的提示

printf("此圖書庫存不超過3本,請盡快購買\n\n");

printf("請輸入您需要購買的數(shù)量(請輸入正整數(shù),若不購買輸入0或者直接按回車鍵)\n");

fflush(stdin);gets(str);

booknum=judge(str);

if(booknum==-l)continue;〃防止輸入了字母或其他符號被強(qiáng)制轉(zhuǎn)化為整型數(shù)而引發(fā)

的錯(cuò)誤

if(bk[i].store<booknum)

(

printf("此圖書庫存不足,圖書庫存%d本

\n\n請重新輸入購買數(shù)量\n",bk[i].store);

continue;〃圖書庫存不足的提示

)

bk[i].sale+=booknum;

bk[i].store-=booknum;〃對數(shù)組中數(shù)據(jù)的更改

for(bookp=bklist->next;bookp!=NULL;bookp=bookp->next)

(

if(strcmp(buy,bookp->ISBN)==0)

(

bookp->sale+=booknum;

bookp->store-=booknum;

)

)〃對單鏈表中圖書數(shù)據(jù)的更改

printf("已完成操作!\n\n");break;

)

)

//〃/〃/〃/〃〃〃/〃/〃/〃退還圖書〃/〃〃/〃/〃〃〃/〃/〃/〃/〃/〃/〃〃/〃/〃/〃/〃/

while(op==4)

(

ordershow("退還圖書");

printf(”請輸入您需要退還圖書的ISBN號,以回車鍵結(jié)束;結(jié)束退

還請輸入0,以回車結(jié)束。\n");

fflush(stdin);gets(back);

if(strcmp(back,"O")==O)break;

for(i=0;i<n;i++)

(

if(strcmp(bk[i].ISBN,back)==O)break;

)

if(i==n)

(

printf("您所退還的圖書不存在,請重新輸入

\n\n");continue;

)

if(i<n)

show(&bk[i]);

while(l)

printf。是否需要重新查詢?繼續(xù)退還請輸入1,

返回上一界面請輸入0或者直接按回車鍵,以回車鍵結(jié)束\n)

fflush(stdin);gets(str);

operat=judge(str);

if(operat==-l)continue;

if(operat!=l&&operat!=0)

printf(”請輸入0-1中的某一整數(shù),以回

車鍵結(jié)束\n\n)

continue;

)

elsebreak;

)

if(operat==0)continue;

)

while(l)

printf("請輸入您需要退還的數(shù)量(請輸入正整數(shù),

若不退還輸入0或者直接按回車鍵,以回車鍵結(jié)束)\n");

fflush(stdin);gets(str);

booknum=judge(str);

if(booknum==-l)continue;〃退還圖書的以

上程序與購買圖書的對應(yīng)程序相似,故不詳述

if(bk[i].sale-booknum<0)

(

printf("退貨數(shù)量應(yīng)在0和%d之間,請仔

細(xì)檢查數(shù)量。\n\n",bk[i].sale);continue;

)〃如果顧客的退貨數(shù)量超過了銷售量,那么顧客可能弄錯(cuò)了退貨數(shù)量(有可能把不是

本書店賣出的書退還了)

bk[i].sale-=booknum;

bk[i].store+=booknum;

for(bookp=bklist->next;bookp!=NULL;bookp=bookp->next)

(

if(strcmp(back,bookp->ISBN)==0)

(

bookp->sale-=booknum;

bookp->store+=booknum;

)

)〃更改數(shù)組和單鏈表中的相應(yīng)數(shù)據(jù)

printf("已完成操作!\n\n");break;

)

)

)〃從這里跳出循環(huán),開始保存數(shù)據(jù)

fclose(p);p=NULL;〃關(guān)閉文件。由于最初文件是以可讀式打開的,不能更改容

if((p=fopen("圖書.txt","w"))==NULL)

(

printf("文件打開失敗!\n");return;

)〃以可寫的式打開文件

fprintf(p,"%d\n",n);〃首先在第一行錄入圖書數(shù)量

for(i=0;i<n;i++)

fprintf(p,"%s%,2f%d%d%c%s",bk[i].ISBN,bk[i].price,bk[i].storeO,bk[i].store,bk

[i].discount,bk[i].name);

rewind(p);〃錄入每一本圖書的相關(guān)信息,將指針指向文件開頭

fclose(p);p=NULL;〃關(guān)閉文件,文件指針指空

freellist(bklist);〃將單鏈表的指針賦空并釋放單鏈表中的存

oper[0]=NULL;oper[l]=NULL;〃將指向函數(shù)的指針賦空

一、概述

本程序?yàn)閳D書銷售管理系統(tǒng),實(shí)現(xiàn)圖書的查找、排序、購買、退貨等功能,并將數(shù)據(jù)存

入磁盤文件中保存。

本程序?yàn)閃in32開發(fā)的控制臺(tái)應(yīng)用程序,在VisualStdio2012下完成。本程序的特

點(diǎn)是功能完整、界面友好(請?jiān)谶\(yùn)行程序時(shí)將窗口寬度調(diào)節(jié)到至少160\防錯(cuò)誤功能較完

[=10

二、程序設(shè)計(jì)思路

本圖書銷售管理系統(tǒng)主要完成的功能有:

1、圖書查詢

1.1ISBN查詢1.2關(guān)鍵詞查詢1.3所有圖書信息查詢

2、排行查詢

2.1銷量排行2.2庫存排行2.3價(jià)格排行

3、圖書購買

3.1ISBN檢索圖書3.2購買圖書的信息顯示和購買確認(rèn)3.3購買數(shù)據(jù)存入

4、圖書退還

4.1購買圖書的信息顯示和購買確認(rèn)4.2購買數(shù)據(jù)存入

為實(shí)現(xiàn)這些功能,本程序一共編寫了11個(gè)函數(shù)分別實(shí)現(xiàn)上述功能。如下:

函數(shù)名功能

judge判斷輸入容是否為0或者正整數(shù);是則返回該正整數(shù),否則返回-1

show顯示圖書所有信息

ordershow對界面進(jìn)行分欄;使界面清晰友好;提示用戶當(dāng)前所在的操作界面

column顯示圖書信息的表頭欄

create創(chuàng)建儲(chǔ)存圖書信息的單鏈表,同時(shí)將圖書信息儲(chǔ)存在另一結(jié)構(gòu)體數(shù)組中

freellist釋放單鏈表的存,指針賦空

search利用單鏈表進(jìn)行ISBN查找圖書;找到則輸出圖書信息,否則給出提示

keyword關(guān)鍵詞查詢:顯示書名完整包含關(guān)鍵詞的圖書信息

bubblesort利用單鏈表進(jìn)行冒泡排序,使銷量由高到低排序顯示

selectsort利用數(shù)組進(jìn)行選擇排序,使價(jià)格由低到高排行顯示

insertsort利用數(shù)組進(jìn)行插入排序,使庫存由低到高排行顯示

將程序進(jìn)行模塊化處理是十分有益的。模塊化后,程序顯得更加清晰;出錯(cuò)后可以分塊

解決"更于多次實(shí)現(xiàn)同一功能。

本程序?qū)Υ疟P數(shù)據(jù)的讀取和儲(chǔ)存是利用了鏈表和結(jié)構(gòu)體數(shù)組的。在創(chuàng)建鏈表的同時(shí)對全

局的數(shù)組變量賦值。在實(shí)現(xiàn)功能時(shí),部分功能是對鏈表進(jìn)行操作,部分功能時(shí)對數(shù)組進(jìn)行操

作。在購買和退還操作時(shí),鏈表和數(shù)組數(shù)據(jù)的更改是同時(shí)的。最后讀取數(shù)組的信息進(jìn)入文件,

保存到磁盤中

實(shí)現(xiàn)這一系統(tǒng),除了對功能的實(shí)現(xiàn)和對數(shù)據(jù)的讀取、更改、儲(chǔ)存外,對錯(cuò)誤的提醒和隱

患的避免也是十分重要的。本系統(tǒng)中有對文件打開錯(cuò)誤的提醒,對動(dòng)態(tài)空間的釋放和指針的

賦空。本程序中對操作容正誤的判斷是這樣進(jìn)行的:為了避免用戶輸入容中存在空格引起錯(cuò)

誤,本程序使用while循環(huán),利用fflush(sdtin);gets(charaD?對所有數(shù)據(jù)進(jìn)行讀取的。這

樣消除了緩沖區(qū)的回車,并將用戶輸入的一行所有容讀入(用scanf就會(huì)在出現(xiàn)空格之后停

止),并用judge函數(shù)進(jìn)行判斷。將0或正整數(shù)正確輸出,并將含有其他任無關(guān)字符的輸入

視為錯(cuò)誤,輸出-1(但是當(dāng)直接回車時(shí),judge函數(shù)會(huì)輸出0X這樣就可以實(shí)現(xiàn)只對用戶

的正確容進(jìn)行讀取后退出循環(huán);對錯(cuò)誤容給出提示,并利用while循環(huán)返回上一操作界面。

由于不同的功能的實(shí)現(xiàn)需要排除用戶可能輸入的不同錯(cuò)誤,所以main函數(shù)中的大量容對用

戶輸入容的正確讀入和錯(cuò)誤提醒。

此外,本程序在開始打開文件”圖書.txt"時(shí),是以可讀式打開的。以防止原始數(shù)據(jù)由

于程序的意外關(guān)閉而丟失。在程序末尾,在關(guān)閉文件后重新以可寫式打開文件,并對數(shù)據(jù)重

新讀入。這樣可以防止大量圖書信息丟失。

當(dāng)然,本程序還有一些缺陷。由于所開的字符串?dāng)?shù)組的大小限制,用戶輸入容不能超過

100個(gè)字符,否則程序出現(xiàn)錯(cuò)誤。此外,若在程序運(yùn)行中途關(guān)閉程序,則購買和退還圖書的

信息會(huì)全部丟失。改進(jìn)的式是將程序的讀取放在每一次購買和退貨操作之后進(jìn)行。

三、變量說明

變量意義

FILE*p指向磁盤文件的指針

structbook*bookpmain函數(shù)中用于單鏈表操作的指針

intn圖書種類數(shù)

structbook*bklist儲(chǔ)存圖書信息的單鏈表首地址

structbookbk[100]儲(chǔ)存圖書信息的數(shù)組

intop主操作變量(控制進(jìn)入某一主要功能)

intoperat次操作變量(控制主要功能下的次要功能)

intbooknumber購買或者退還的圖書數(shù)量

inti計(jì)數(shù)使用

charISBNO[lOO]查詢圖書的ISBN號

charbuy[100]購買圖書的ISBN號

charback[100]退還圖書的ISBN號

charstr[100]臨時(shí)儲(chǔ)存用戶輸入信息的字符數(shù)組

void(*oper[2])(structbooka[])排序操作時(shí)使用的指向函數(shù)的指針數(shù)組

四、流程圖

見文件"程序流程圖jpg”,由于流程圖較大,放于word中難以清晰顯示,造成不便

請見諒。

五、測試數(shù)據(jù)

加粗黑體為輸入的測試數(shù)據(jù),宋體為程序顯示容,正體為本人添加的注釋。

以下是程序測試容和相應(yīng)的注釋:

你好,歡迎使用圖書銷售管理系統(tǒng),請選擇您想要進(jìn)行的操作

圖書查詢請按1;圖書排行請按2;圖書購買請按3;退貨請按4;

退出程序請按0或者直接按回車鍵。

輸入數(shù)字后以回車鍵結(jié)束

12323〃輸入錯(cuò)誤信息

請輸入正整數(shù)或0。

你好,歡迎使用圖書銷售管理系統(tǒng),請選擇您想要進(jìn)行的操作

圖書查詢請按1;圖書排行請按2;圖書購買請按3;退貨請按4;

退出程序請按0或者直接按回車鍵。

輸入數(shù)字后以回車鍵結(jié)束

1

------------------------圖書查詢-----------------------------

請輸入圖書的ISBN號(若查詢所有圖書信息請按0,若使用關(guān)鍵詞查找請按1)

輸入完成后以回車鍵結(jié)束。

1123〃直接用scant就會(huì)進(jìn)入關(guān)鍵詞查

找,

而本程序在輸入后可以識(shí)別錯(cuò)誤

---------------------------ISBN查找----------------------------

抱歉,沒有找到相應(yīng)的圖書。

繼續(xù)查詢請按1;結(jié)束查詢請按0或者直接按回車鍵。輸入數(shù)字后以回車鍵結(jié)束。

w23d2d2311〃輸入錯(cuò)誤

請輸入正整數(shù)或0。

輸入容有誤

繼續(xù)查詢請按1;結(jié)束查詢請按0或者直接按回車鍵。輸入數(shù)字后以回車鍵結(jié)束。

1

------------------------圖書查詢-----------------------------

請輸入圖書的ISBN號(若查詢所有圖書信息請按0,若使用關(guān)鍵詞查找請按1)

輸入完成后以回車鍵結(jié)束。

0〃查詢所有圖書

------------------------所有圖書信息----------------------------

ISBN號價(jià)格庫存銷售量是否促銷書名

978-7-302-16568-229.80982Y簡明物理化學(xué)

978-7-04-024384-017.39355N計(jì)算機(jī)文化基礎(chǔ)

720-8-02-364615-015.00050N鄧小平傳

711-3-01-061004-514.00470Y科學(xué)革命的結(jié)構(gòu)

978-7-302-16434-239.8028N大學(xué)化學(xué)

978-7-04-02111-018.39391N程序設(shè)計(jì)基礎(chǔ)

720-8-02-12345-017.00446N毛澤東傳

711-3-01-061224-524.001210Y科學(xué)革命

978-7-302-16128-239.80595N物理化學(xué)

978-7-04-022224-017.39319N計(jì)算機(jī)

繼續(xù)查詢請按1;結(jié)束查詢請按0或者直接按回車鍵。輸入數(shù)字后以回車鍵結(jié)束。

12ww〃輸入錯(cuò)誤

請輸入正整數(shù)或0。

輸入容有誤

繼續(xù)查詢請按1;結(jié)束查詢請按0或者直接按回車鍵。輸入數(shù)字后以回車鍵結(jié)束。

1

------------------------圖書查詢-----------------------------

請輸入圖書的ISBN號(若查詢所有圖書信息請按0,若使用關(guān)鍵詞查找請按1)

輸入完成后以回車鍵結(jié)束。

711-3-01-061224-5//ISBN查詢

---------------------------ISBN查找----------------------------

ISBN號價(jià)格庫存銷售量是否促銷書名

711-3-01-061224-524.001210Y科學(xué)革命

繼續(xù)查詢請按1;結(jié)束查詢請按0或者直接按回車鍵。輸入數(shù)字后以回車鍵結(jié)束。

wsn1〃輸入錯(cuò)誤

請輸入正整數(shù)或0。

輸入容有誤

繼續(xù)查詢請按1;結(jié)束查詢請按0或者直接按回車鍵。輸入數(shù)字后以回車鍵結(jié)束。

1

------------------------圖書查詢-----------------------------

請輸入圖書的ISBN號(若查詢所有圖書信息請按0,若使用關(guān)鍵詞查找請按1)

輸入完成后以回車鍵結(jié)束。

1

------------------------關(guān)鍵詞查詢-----------------------------

請輸入關(guān)鍵詞:(直接按回車鍵可查詢所有圖書)

傳〃以"傳"作為關(guān)鍵詞查詢

ISBN號價(jià)格庫存銷售量是否促銷書名

720-8-02-364615-015.00050N鄧小平傳

720-8-02-12345-017.00446N毛澤東傳

〃得到上述包含"傳"的兩本書

繼續(xù)查詢請按1;結(jié)束查詢請按0或者直接按回車鍵。輸入數(shù)字后以回車鍵結(jié)束。

1

------------------------圖書查詢-----------------------------

請輸入圖書的ISBN號(若查詢所有圖書信息請按0,若使用關(guān)鍵詞查找請按1)

輸入完成后以回車鍵結(jié)束。

1

------------------------關(guān)鍵詞查詢----------------------------

請輸入關(guān)鍵詞:(直接按回車鍵可查詢所有圖書)

明物〃只要是輸入字符串包含在書名中的書都符合要求

ISBN號價(jià)格庫存銷售量是否促銷書名

978-7-302-16568-229.80982Y簡明物理化學(xué)

繼續(xù)查詢請按1;結(jié)束查詢請按0或者直接按回車鍵。輸入數(shù)字后以回車鍵結(jié)束。

1

------------------------圖書查詢-----------------------------

請輸入圖書的ISBN號(若查詢所有圖書信息請按0,若使用關(guān)鍵詞查找請按1)

輸入完成后以回車鍵結(jié)束。

1

------------------------關(guān)鍵詞查詢----------------------------

請輸入關(guān)鍵詞:(直接按回車鍵可查詢所有圖書)

是hZiwyh1〃輸入沒有的關(guān)鍵詞

ISBN號價(jià)格庫存銷售量是否促銷書名

抱歉,沒有找到相應(yīng)的圖書。

繼續(xù)查詢請按1;結(jié)束查詢請按0或者直接按回車鍵。輸入數(shù)字后以回車鍵結(jié)束。

0〃退出查詢

你好,歡迎使用圖書銷售管理系統(tǒng),請選擇您想要進(jìn)行的操作

圖書查詢請按1;圖書排行請按2;圖書購買請按3;退貨請按4;

退出程序請按0或者直接按回車鍵。

輸入數(shù)字后以回車鍵結(jié)束

2〃進(jìn)入排行

------------------------排行查詢----------------------------

按銷量由高到低排序請按1;按價(jià)格由低到高排序請按2;按庫存量由低到高排序請按3;

結(jié)束排行查詢請按0或者直接按回車鍵;輸入數(shù)字后以回車鍵結(jié)束。

1230〃輸入錯(cuò)誤

請輸入正整數(shù)或0。

------------------------排行查詢----------------------------

按銷量由高到低排序請按1;按價(jià)格由低到高排序請按2;按庫存量由低到高排序請按3;

結(jié)束排行查詢請按0或者直接按回車鍵;輸入數(shù)字后以回車鍵結(jié)束。

1〃銷量排行

------------------------銷量由高至!J低排序----------------------------

ISBN號價(jià)格庫存銷售量是否促銷書名

978-7-302-16128-239.80595N物理化學(xué)

720-8-02-364615-015.00050N鄧小平傳

720-8-02-12345-017.00446N毛澤東傳

711-3-01-061224-524.001210Y科學(xué)革命

978-7-04-022224-017.39319N計(jì)算機(jī)

978-7-302-16434-239.8028N大學(xué)化學(xué)

978-7-04-024384-017.39355N計(jì)算機(jī)文化基礎(chǔ)

978-7-302-16568-229.80982Y簡明物理化學(xué)

978-7-04-02111-018.39391N程序設(shè)計(jì)基礎(chǔ)

711-3-01-061004-514.00470Y科學(xué)革命的結(jié)構(gòu)

繼續(xù)排行查詢請按1;結(jié)束排行查詢請按0或者直接按回車鍵。輸入數(shù)字后以回車鍵結(jié)束

12wqs〃輸入錯(cuò)誤

請輸入正整數(shù)或0。

繼續(xù)排行查詢請按1;結(jié)束排行查詢請按0或者直接按回車鍵。輸入數(shù)字后以回車鍵結(jié)束

1

------------------------排行查詢----------------------------

按銷量由高到低排序請按1;按價(jià)格由低到高排序請按2;按庫存量由低到高排序請按3;

結(jié)束排行查詢請按0或者直接按回車鍵;輸入數(shù)字后以回車鍵結(jié)束。

2〃價(jià)格排行

------------------------價(jià)格由低到高排行----------------------------

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論