電 話:18937133779
網(wǎng) 址:http://oaoy.cn
郵 箱:zboao@qq.com
建議您嘗試一下DoraCMS,Nodejs+express+mongodb編寫(xiě)的一套內(nèi)容管理系統(tǒng)。DoraCMS開(kāi)源沒(méi)多久,但是已獲得很多前端開(kāi)發(fā)者的關(guān)注。目前市面上有很多內(nèi)容管理系統(tǒng)(如織夢(mèng)、帝國(guó)等),都是以php為基礎(chǔ)編寫(xiě)的,而DoraCMS則是基于nodejs,只要有基本的前端開(kāi)發(fā)經(jīng)驗(yàn)和少量的js,就很容易上手。DoraCMS創(chuàng)建的目的是為了更深入的了解nodejs并付諸實(shí)踐,開(kāi)源的目的也是為了通過(guò)案例來(lái)不斷改進(jìn)我們的nodejs水平,共同提高;其次
DoraCMS結(jié)構(gòu)清晰、模塊簡(jiǎn)單,上手很容易。目前市面的cms結(jié)構(gòu)復(fù)雜,想要自己修改定制學(xué)習(xí)成本比較高。初識(shí)nodejs的開(kāi)發(fā)者可以了解一個(gè)
cms實(shí)現(xiàn)的基礎(chǔ)過(guò)程,熟悉nodejs的也可以用DoraCMS 來(lái)進(jìn)行二次開(kāi)發(fā),不用再?gòu)念^開(kāi)始。DoraCMS
遵循MIT協(xié)議完全開(kāi)源,您可以自由定制屬于你自己的網(wǎng)站而不必花很多時(shí)間去處理最基礎(chǔ)的一些東西,為了讓更多的人去了解和認(rèn)識(shí)nodejs,于是
DoraCMS 誕生了。
DoraCMS是基于Nodejs+express+mongodb編寫(xiě)的一套內(nèi)容管理系統(tǒng),結(jié)構(gòu)簡(jiǎn)單,較目前一些開(kāi)源的cms,doracms易于拓展,特別適合前端開(kāi)發(fā)工程師做二次開(kāi)發(fā)。
一、對(duì)問(wèn)題的描述和數(shù)據(jù)結(jié)構(gòu)的選擇
【問(wèn)題描述】
設(shè)計(jì)一個(gè)計(jì)算機(jī)管理系統(tǒng)完成圖書(shū)管理基本業(yè)務(wù)。
【任務(wù)要求】
1)每種書(shū)的登記內(nèi)容包括書(shū)號(hào)、書(shū)名、著作者、現(xiàn)存量和庫(kù)存量;
2)對(duì)書(shū)號(hào)建立索引表(線性表)以提高查找效率;
3)系統(tǒng)主要功能如下:
*采編入庫(kù):新購(gòu)一種書(shū),確定書(shū)號(hào)后,登記到圖書(shū)帳目表中,如果表中已有,則只將庫(kù)存量增加;
*借閱:如果一種書(shū)的現(xiàn)存量大于0,則借出一本,登記借閱者的書(shū)證號(hào)和歸還期限,改變現(xiàn)存量;
*歸還:注銷對(duì)借閱者的登記,改變?cè)摃?shū)的現(xiàn)存量。
【進(jìn)一步完成內(nèi)容】
1)系統(tǒng)功能的進(jìn)一步完善;
2)索引表采用樹(shù)表。
3)設(shè)計(jì)內(nèi)容
4)程序流程圖
5)源程序
6)軟件測(cè)試報(bào)告(包括所用到的數(shù)據(jù)及結(jié)果)
【數(shù)據(jù)結(jié)構(gòu)】
這里我們簡(jiǎn)單的用單鏈表就可以實(shí)現(xiàn)。
// 圖書(shū)管理系統(tǒng)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
#include <time.h>
/*定義圖書(shū)有關(guān)的數(shù)據(jù)結(jié)構(gòu)*/
struct book
{
int BookNum; /*圖書(shū)編號(hào)*/
charBookName[20]; /*圖書(shū)名字*/
char BookAuthor[15];/*圖書(shū)作者*/
int nowCount; /*圖書(shū)現(xiàn)存量*/
int allCount; /*圖書(shū)庫(kù)存量*/
};
/*定義與讀者有關(guān)的數(shù)據(jù)結(jié)構(gòu)*/
struct reader
{
int ReaderNum; /*讀者編號(hào)*/
charReaderName[20]; /*讀者的姓名*/
charReaderSex[8]; /*讀者的性別*/
int ReaderAge; /*讀者的年齡*/
charReaderTel[15]; /*讀者的電話*/
int ReaderCount; /*讀者目前已經(jīng)借閱的數(shù)目*/
charpassword[16]; /*讀者證件密碼*/
chardate[10][100]; /*讀者借閱日期*/
intReaderBorrow[10]; /*當(dāng)前已經(jīng)借閱的圖書(shū)編號(hào)*/
charBorrowName[10][40];/*已經(jīng)借閱的圖書(shū)名字*/
};
/*定義與每條圖書(shū)紀(jì)錄有關(guān)的數(shù)據(jù)結(jié)構(gòu)*/
typedef struct booknode
{
struct book data; /*數(shù)據(jù)域*/
struct booknode*next; /*指針域*/
}BookNode;
/*定義與每條讀者紀(jì)錄有關(guān)的數(shù)據(jù)結(jié)構(gòu)*/
typedef struct readernode
{
struct readerdata; /*數(shù)據(jù)域*/
struct readernode*next; /*指針域*/
}ReaderNode;
/*定義圖書(shū)館中讀者和藏書(shū)的總數(shù)目*/
struct rbnum
{
int rnum; /*讀者總個(gè)數(shù)*/
int bnum; /*書(shū)籍總本數(shù)*/
}allRBnum;
/*******************************************/
/*函數(shù)聲明*/
BookNode *OpenBook(); /*打開(kāi)圖書(shū)庫(kù)文件*/
ReaderNode *OpenReader(); /*打開(kāi)讀者庫(kù)文件*/
void InBook(BookNode *pbook); /*圖書(shū)錄入*/
void SaveBook(BookNode *pbook); /*圖書(shū)信息保存*/
void SaveReader(ReaderNode *preader); /*讀者信息保存*/
void BorrowBook(BookNode *pbook, ReaderNode *preader); /*圖書(shū)借閱*/
void ReturnBook(BookNode *pbook, ReaderNode *preader); /*圖書(shū)歸還*/
void LookBook(BookNode *pbook); /*瀏覽圖書(shū)庫(kù)*/
void LookReader(ReaderNode *preader); /*瀏覽讀者庫(kù)*/
void InReader(ReaderNode *preader); /*借書(shū)證辦理*/
void FindReaderAll(ReaderNode *preader); /*讀者信息查詢*/
ReaderNode *LoginReader(ReaderNode *preader); /*讀者登陸驗(yàn)證*/
int LoginAdmin(); /*管理員登陸驗(yàn)證*/
void ModifyReader(ReaderNode *preader); /*修改讀者信息*/
void ModifyBook(BookNode *pbook); /*修改圖書(shū)信息*/
void GotoXY(int x, int y); /*光標(biāo)定位*/
void erase(int n); /*擦除菜單選項(xiàng)*/
void menu(int n); /*菜單選項(xiàng)*/
void FindBook(BookNode *pbook); /*圖書(shū)搜索*/
void LocalTime(char *strTime); /*獲取系統(tǒng)本地時(shí)間*/
/*******************************************/
原文地址:
#include <stdio.h> #include <string.h> #include <stdlib.h> // #define MAXSIZE 100 //最大值定義為100 #define LIST_INIT_SIZE 100//圖書(shū)證使用者最大值定義為100 //借書(shū)人的結(jié)構(gòu)體 typedef struct Boro//借書(shū)行為 { char BNum[20];//借書(shū)的書(shū)號(hào) char RetDate[8];//歸還日期 struct Boro *next; }Bor; typedef struct LinkBook { Bor *next; //該圖書(shū)證的借書(shū)行為 char CNum[20]; //卡號(hào) int Total; //借書(shū)的數(shù)量 }lend[LIST_INIT_SIZE];//借書(shū)人數(shù)組 //圖書(shū)的結(jié)構(gòu)體信息 typedef struct LNode { char CardNum[20];//圖書(shū)證號(hào) struct LNode *next; }LinkList; //借書(shū)人 typedef struct book {//每種圖書(shū)需要登記的內(nèi)容包括書(shū)號(hào)ISBN、書(shū)名、作者、出版社、總庫(kù)存量和現(xiàn)庫(kù)存量。 char num[20];//書(shū)號(hào) char name[20];//書(shū)名 char auth[20];//作者 char pub[20];//出版社 int TotNum;//總庫(kù)存 int NowNum;//現(xiàn)庫(kù)存 LinkList *next;//借了該書(shū)的人 }ook[MAXSIZE]; // int Retotal;//讀者數(shù)量 int total; //定義外部變量.書(shū)的種類數(shù) // //結(jié)構(gòu)體初始化 void InitBo(ook &boo) //初始化圖書(shū)信息 { for(int i=0;i<MAXSIZE;i++) { boo[i].NowNum=0; boo[i].TotNum=0; boo[i].next=NULL; } } void InitRe(lend &Lin) //初始化借閱者信息 { for(int i=0;i<LIST_INIT_SIZE;i++) Lin[i].next=NULL; } // int mid=0;//外部函數(shù)mid,用來(lái)返回查找到的位置 bool BinarySearch(ook boo,char SearchNum[]) //二分法查找比較書(shū)號(hào) { //用bool函數(shù),但由于函數(shù)不能有兩個(gè)返回值,所以設(shè)置一個(gè)外部變量mid,用來(lái)返回查找到的位置 int low=0,high=total-1; int found=0; while(low<=high) { mid=(low+high)/2; //中間點(diǎn) if(strcmp(boo[mid].num,SearchNum)==0) //書(shū)號(hào)相同 { found=1; return true; }//查找成功 if(strcmp(boo[mid].num,SearchNum)!=0)//書(shū)號(hào)不同 high=mid-1; else low=mid+1; } if(found==0) return false; //查找失敗 } void Buy(ook &boo, char BuyNum[]) {//1、 采編入庫(kù):新購(gòu)入一種書(shū),如果該書(shū)在圖書(shū)賬目中已經(jīng)存在,則將其庫(kù)存量增加(包 //括總庫(kù)存量和現(xiàn)庫(kù)存量),如果該書(shū)不存在,則在圖書(shū)賬目中增加一種書(shū),總庫(kù)存量和現(xiàn)庫(kù)存量均為1。 if(BinarySearch(boo,BuyNum)) //如果書(shū)庫(kù)中有此書(shū) { boo[mid].TotNum++; //總庫(kù)存加1 boo[mid].NowNum++; //現(xiàn)庫(kù)存加1 printf("入庫(kù)成功.\n"); printf("已更改書(shū)庫(kù)中該書(shū)的信息。編號(hào) %s 的書(shū) %s 作者是 %s ,出版社是 %s ,目前的總庫(kù)存是 %d ,現(xiàn)庫(kù)存是 %d 。\n",boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].TotNum,boo[mid].NowNum); } if(!BinarySearch(boo,BuyNum)) { int i; for(i=total;i>mid&&total;i--) //插在適合位置 保持有序 boo[i]=boo[i-1]; //空出插入位置 printf("該書(shū)在書(shū)庫(kù)中不存在。設(shè)立新書(shū)目,請(qǐng)補(bǔ)全書(shū)的詳細(xì)信息。\n"); strcpy(boo[i].num,BuyNum); printf("該書(shū)購(gòu)入的數(shù)量是:"); scanf(" %d",&boo[i].NowNum); boo[i].TotNum=boo[i].NowNum; printf("該書(shū)的名字是:"); scanf(" %s",&boo[i].name); printf("該書(shū)的作者是:"); scanf(" %s",&boo[i].auth); printf("該書(shū)的出版社是:"); scanf(" %s",&boo[i].pub);//補(bǔ)全信息 boo[i].next=NULL; total++;//總量+1 printf("已增加該書(shū)的信息。編號(hào) %s 的書(shū) %s 作者是 %s ,出版社是 %s ,目前的總庫(kù)存是 %d ,現(xiàn)庫(kù)存是 %d 。\n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum); printf("入庫(kù)成功.\n"); } } void Delete(ook &boo,char DeleteNum[]) {//2、 清空庫(kù)存:某一種書(shū)已無(wú)保留價(jià)值,將它從圖書(shū)賬目中注銷。 if(BinarySearch(boo,DeleteNum)==false||total==0) //如果無(wú)此書(shū) printf("書(shū)庫(kù)中沒(méi)有該書(shū).\n"); if(BinarySearch(boo,DeleteNum))//若有 { if(!boo[mid].next) { int j; for( j=mid;j<total;j++) boo[j]=boo[j+1]; strcpy(boo[j].num,boo[j+1].num); strcpy(boo[j].name,boo[j+1].name); strcpy(boo[j].auth,boo[j+1].auth); strcpy(boo[j].pub,boo[j+1].pub); boo[j].TotNum=boo[j+1].TotNum; boo[j].NowNum=boo[j+1].NowNum; printf("已成功刪除該書(shū).\n"); } else printf("該書(shū)有借閱者,無(wú)法刪除。\n"); } } void Borrow(ook &boo,lend &Lin,char BorrowNum[],char CaNum[]) {//3、 借閱:如果一種書(shū)的現(xiàn)庫(kù)存量大于零,則借出一本書(shū),將現(xiàn)庫(kù)存量減1, //并登記借閱者的圖書(shū)證號(hào)和歸還期限。 Bor *p,*q; LinkList *m,*n; if(!BinarySearch(boo,BorrowNum)||total==0) //如果沒(méi)有找到此書(shū) printf("書(shū)庫(kù)里沒(méi)這書(shū)。\n");//如果有這書(shū) if(BinarySearch(boo,BorrowNum)) //書(shū)庫(kù)里有 { if(boo[mid].NowNum>0) //看現(xiàn)庫(kù)存是否大于0 { boo[mid].NowNum--;//借出一本,少1 if(boo[mid].next==NULL) //若該書(shū)信息下顯示該種書(shū)還沒(méi)被人借過(guò) { m=(LinkList *)malloc(sizeof(LNode));//分配 boo[mid].next=m;//該圖書(shū)信息中的鏈表的第一個(gè)結(jié)點(diǎn) strcpy(m->CardNum,CaNum); m->next=NULL;//后一個(gè)結(jié)點(diǎn)為空 } else //如果已經(jīng)有人在借這書(shū)了 { m=boo[mid].next; while(m->next) //遍歷到最后一個(gè)結(jié)點(diǎn) m=m->next; n=(LinkList *)malloc(sizeof(LNode));//分配空間,增加1個(gè)結(jié)點(diǎn) m->next=n; strcpy(n->CardNum,CaNum);//記錄證號(hào) n->next=NULL; } int i=0; for(i=0;i<Retotal;i++)// { if(!strcmp(Lin[i].CNum,CaNum))//如果已經(jīng)有該圖書(shū)證的信息 { p=Lin[i].next; while(p->next)p=p->next;//遍歷到最后一個(gè)結(jié)點(diǎn) q=(Bor *)malloc(sizeof(Boro));//分配空間 p->next=q; strcpy(q->BNum,BorrowNum); //記錄書(shū)號(hào) printf("輸入歸還日期:"); scanf("%s",&q->RetDate); q->next=NULL; printf("借閱成功.\n"); break; //找到證了就跳出循環(huán) } } if(i==Retotal)//如果沒(méi)有這張證的信息 { strcpy(Lin[i].CNum,CaNum); //記錄證號(hào) p=(Bor *)malloc(sizeof(Boro)); //分配空間 Lin[i].next=p; strcpy(p->BNum,BorrowNum); printf("輸入歸還日期:"); scanf(" %s",&p->RetDate); p->next=NULL; Retotal++; //借閱證號(hào)信息總數(shù)加1 printf("借閱成功.\n"); } } else printf("借閱失敗.該書(shū)現(xiàn)在庫(kù)存為0.\n"); } } void Return(ook &boo,lend &Lin,char ReturnNum[],char BorrowerNum[]) {//4、 歸還:注銷對(duì)借閱者的登記,改變?cè)摃?shū)的現(xiàn)存量。 Bor *p,*q; LinkList *m,*n; int flag=0;//設(shè)置一個(gè)參數(shù) if(!BinarySearch(boo,ReturnNum)||!total) //沒(méi)書(shū) printf("書(shū)庫(kù)中無(wú)此書(shū).\n"); if(BinarySearch(boo,ReturnNum)) //有書(shū) { m=boo[mid].next; if(!strcmp(m->CardNum,BorrowerNum)) //如果是第一個(gè)借的人還的 { boo[mid].NowNum++; //現(xiàn)庫(kù)存加1 boo[mid].next=m->next; //刪除結(jié)點(diǎn) free(m); //釋放該結(jié)點(diǎn)的空間空間 } else { while(m->next) //查找歸還者的借閱者結(jié)點(diǎn) { if(!strcmp(m->next->CardNum,BorrowerNum)) //如果找到 { n=m->next; //n為歸還者的借閱結(jié)點(diǎn) m->next=n->next; //m指向歸還者的借閱結(jié)點(diǎn)的下一結(jié)點(diǎn) free(n); //釋放空間 boo[mid].NowNum++; //現(xiàn)庫(kù)存加1 break; } m=m->next; } } } //在借閱者表里查找借閱者信息 for(int i=0;i<Retotal;i++) { if(!strcmp(Lin[i].CNum,BorrowerNum)) //如果找到借閱者 { p=Lin[i].next; if(!strcmp(p->BNum,ReturnNum)) //如果是歸還的是借的第一本書(shū) { Lin[i].next=p->next; //指向下一借書(shū)結(jié)點(diǎn) free(p); //釋放結(jié)點(diǎn)空間 printf("成功歸還該書(shū).\n"); flag=1; break; } else //找不到 { while(p->next) //找到歸還書(shū)的借書(shū)結(jié)點(diǎn) { if(!strcmp(p->next->BNum,ReturnNum)) //如果找到 { q=p->next; //q為歸還書(shū)的借書(shū)結(jié)點(diǎn) p->next=q->next; //p指向下一借書(shū)結(jié)點(diǎn) free(q); //釋放空間 printf("成功歸還該書(shū).\n"); flag=1; break; } p=p->next; } } } } for(int k=0;k<Retotal;k++) if(!Lin[k].next) { int j; for(j=k;j<Retotal;j++) Lin[j]=Lin[j+1]; //其后都往前移一位,覆蓋掉當(dāng)前信息 strcpy(Lin[j].CNum," "); //刪除圖書(shū)證號(hào) Retotal--; //圖書(shū)證數(shù)減1 } //刪除當(dāng)前狀態(tài)下沒(méi)借書(shū)的圖書(shū)證的信息,節(jié)省空間 if(flag==0) printf("無(wú)該證信息.\n"); } //5、 查找:實(shí)現(xiàn)按三種查詢條件之一查找:按書(shū)號(hào)查找、 //按書(shū)名查找、按作者查找。注:可不實(shí)現(xiàn)組合查找,即幾個(gè)條件組合查找。 void SearchByNum(ook &boo,char SeaNum[]) {//BY NUM 根據(jù)書(shū)號(hào)查找 LinkList *p; p=boo[mid].next; if(BinarySearch(boo,SeaNum)==false)printf("對(duì)不起,未找到您想查找的書(shū)。\n");//二分查找 沒(méi)找到 else//找到了的話 { { printf("┏━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━┳━━━━━┓\n"); printf("┃ 書(shū)號(hào) ┃ 書(shū)名 ┃ 作者 ┃ 出版社 ┃ 現(xiàn)庫(kù)存 ┃ 總庫(kù)存 ┃\n"); printf("┣━━━━━━━╋━━━━━━━╋━━━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━┫\n"); printf("┃%14s┃%14s┃%16s┃%16s┃%10d┃%10d┃\n",boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].NowNum,boo[mid].TotNum); printf("┗━━━━━━━┻━━━━━━━┻━━━━━━━━┻━━━━━━━━┻━━━━━┻━━━━━┛\n"); if(boo[mid].next!=NULL) { printf("┏━━━━━━━┓\n"); printf("┃ 已借該書(shū)的 ┃\n"); printf("┃ 圖書(shū)證號(hào) ┃\n"); while(p) { printf("┣━━━━━━━┫\n"); printf("┃%14s┃\n",p->CardNum); p=p->next; } printf("┗━━━━━━━┛\n"); } } while(p) { printf(" %s ",p->CardNum);//在按書(shū)號(hào)查找的函數(shù)里也顯示借了這本書(shū)的借閱者的證號(hào) p=p->next; } printf(" \n"); }//顯示查找的書(shū)籍的信息 } void SearchByName(ook &boo) {//BY NAME 根據(jù)書(shū)名查找 char SeaName[20]; printf("輸入想查找的書(shū)的書(shū)名:\n"); scanf(" %s",&SeaName); printf("找到符合該書(shū)名的書(shū)的詳細(xì)信息如下:\n"); for(int i=0;i<total;i++) { if(strcmp(SeaName,boo[i].name)==0)//如果書(shū)名一樣 { printf("書(shū)號(hào):%s\n書(shū)名:%s\n作者:%s\n出版社:%s\n總庫(kù)存量:%d\n現(xiàn)庫(kù)存量:%d\n\n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum); }//顯示符合信息的所有書(shū)籍的信息 } } void SearchByAuth(ook &boo) {// BY AUTH 根據(jù)作者查找 char SeaAuth[20]; printf("輸入想查找的書(shū)的作者:\n"); scanf(" %s",&SeaAuth); printf("找到符合該作者的書(shū)的詳細(xì)信息如下:\n"); for(int i=0;i<total;i++) { if(strcmp(SeaAuth,boo[i].auth)==0)//如果作者一樣 { printf("書(shū)號(hào):%s\n書(shū)名:%s\n作者:%s\n出版社:%s\n總庫(kù)存量:%d\n現(xiàn)庫(kù)存量:%d\n\n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum); }//顯示符合信息的所有書(shū)籍的信息 } } //6、 查看:可查看某圖書(shū)證號(hào)的借閱者借閱的全部圖書(shū),可查看全部超期未還的圖書(shū)。 void ViewCard(ook &boo,lend &Lin) {//查看某圖書(shū)證號(hào)的借閱者借閱的全部圖書(shū) char Num[20]; printf("請(qǐng)輸入您所想要查看的圖書(shū)證號(hào):\n"); scanf(" %s",&Num); Bor *p; int qqq=0; for(int i=0;i<Retotal;i++) { if(strcmp(Lin[i].CNum,Num)==0) //找到該證 { printf("這個(gè)證借的書(shū)有:\n"); p=Lin[i].next; while(p) { printf(" %s ",p->BNum); //書(shū)號(hào) p=p->next; } printf("\n"); qqq=1; break; } } if(qqq==0) printf("該證不存在.\n"); } void ViewBook(ook &boo,lend &Lin) {//查看全部超期未還的圖書(shū) char date[8]; Bor *p; printf("請(qǐng)輸入日期(請(qǐng)按格式20060605輸入):\n"); scanf(" %s",&date); printf("所有超期未還的書(shū)有:\n"); for(int i=0;i<Retotal;i++) { p=Lin[i].next; while(p)//當(dāng)p不空時(shí) { if(strcmp(p->RetDate,date)<0) //超過(guò)日期 { printf("書(shū)號(hào)為 %s 證號(hào)為 %s 應(yīng)歸還日期為 %s \n",p->BNum,Lin[i].CNum,p->RetDate); }//顯示所有超期未還的書(shū)的信息 p=p->next; } } } void Menu() //菜單 { printf("┏—————————————————M E N U————————————————┓\n"); printf("│ │\n"); printf("│ 1. 采編入庫(kù):新購(gòu)入一種書(shū),如果該書(shū)在圖書(shū)賬目中已經(jīng)存在, │\n"); printf("│ 則將其庫(kù)存量增加(包括總庫(kù)存量和現(xiàn)庫(kù)存量)。 │\n"); printf("│ 如果該書(shū)不存在,則在圖書(shū)賬目中增加一種書(shū), │\n"); printf("│ 總庫(kù)存量和現(xiàn)庫(kù)存量均為輸入的數(shù)字。 │\n"); printf("│ 2. 清空庫(kù)存:某一種書(shū)已無(wú)保留價(jià)值,將它從圖書(shū)賬目中注銷。 │\n"); printf("│ 3. 借閱:如果一種書(shū)的現(xiàn)庫(kù)存量大于零,則借出一本書(shū),將現(xiàn)庫(kù)存量減1, │\n"); printf("│ 并登記借閱者的圖書(shū)證號(hào)和歸還期限。 │\n"); printf("│ 4. 歸還:注銷對(duì)借閱者的登記,改變?cè)摃?shū)的現(xiàn)存量。 │\n"); printf("│ 5. 按書(shū)號(hào)查找。 │\n"); printf("│ 6. 按書(shū)名查找。 │\n"); printf("│ 7. 按作者查找。 │\n"); printf("│ 8. 查看某圖書(shū)證號(hào)的借閱者借閱的全部圖書(shū)。 │\n"); printf("│ 9. 查看全部超期未還的圖書(shū)。 │\n"); printf("│ 0. 退出圖書(shū)管理系統(tǒng)。 │\n"); printf("│ │\n"); printf("┗—————————————請(qǐng) 選 擇 你 需 要 的 操 作————————————┛\n"); } void main() { ook Bo; lend Lin; char BNum[20]; char CNum[20]; printf("-----------------------歡 迎 進(jìn) 入 圖 書(shū) 管 理 系 統(tǒng)!---------------------------\n\n"); int choice=10; int SearchCho=10,ViewCho=10; while(choice!=0) { Menu();//顯示菜單 scanf(" %d",&choice); switch(choice) { case 1://采編入庫(kù) printf("請(qǐng)輸入入庫(kù)的書(shū)的書(shū)號(hào):"); scanf(" %s",BNum); Buy(Bo,BNum); break; case 2://清空庫(kù)存 printf("請(qǐng)輸入想要清除的書(shū)的書(shū)號(hào):"); scanf(" %s",BNum); Delete(Bo,BNum); break; case 3://借閱 printf("請(qǐng)輸入想要借閱的書(shū)的書(shū)號(hào):\n"); scanf(" %s",&BNum); printf("請(qǐng)輸入圖書(shū)證號(hào):"); scanf(" %s",&CNum); Borrow(Bo,Lin,BNum,CNum); break; case 4://歸還 printf("請(qǐng)輸入想要?dú)w還的書(shū)的書(shū)號(hào):\n"); scanf(" %s",&BNum); printf("請(qǐng)輸入圖書(shū)證號(hào):"); scanf(" %s",&CNum); Return(Bo,Lin,BNum,CNum); break; case 5://查找//根據(jù)書(shū)號(hào)查找 printf("請(qǐng)輸入書(shū)號(hào):");//輸入書(shū)號(hào)查找 scanf(" %s",&BNum); SearchByNum(Bo,BNum); break; case 6://根據(jù)書(shū)名查找 SearchByName(Bo); break; case 7://根據(jù)作者查找 SearchByAuth(Bo); break; case 8://查看某圖書(shū)證所借的所有書(shū) ViewCard(Bo,Lin); break; case 9: //查看全部超期未還的書(shū) ViewBook(Bo,Lin); break; case 0://退出系統(tǒng) exit(0);break; default:printf("輸入錯(cuò)誤!\n");exit(0);break; } } }
我在我的電腦運(yùn)行通過(guò),這個(gè)程序是我們的一個(gè)作業(yè),可能是你機(jī)子的問(wèn)題
#include<iostream>
using namespace std;
struct book{
int number;
char name[20];
char addr[30];
char writer[12];
double price;
struct book *next;
};
typedef struct book node;
typedef node *link;
void printstart(){
cout<<"------------------------------------\n";
}
void Wrong(){
cout<<"\n=====>提示:輸入錯(cuò)誤!\n";
}
void Nofind(){
cout<<"\n=====>提示:沒(méi)有找到相應(yīng)書(shū)籍!\n";
}
void printc(){
cout<<" 編號(hào)\t書(shū)名\t出版社\t作者\(yùn)t價(jià)格\n";
}
link inserte_link1(link head){
int number;
char *na=new char[12];
char *ad=new char[30];
char *writer=new char[12];
double price;
link pPre,p2,pBac;
cout<<"請(qǐng)輸入";
printc();
cin>>number>>na>>ad>>writer>>price;
p2=new node;
p2->number=number;
strcpy(p2->name,na);
strcpy(p2->addr,ad);
strcpy(p2->writer,writer);
p2->price=price;
p2->next=NULL;
delete na;
if(p2->number>head->number){
p2->next=head;
head=p2;
return head;
}
else{
pPre=head;
pBac=pPre->next;
while(1){
if(p2->number>pBac->number&&p2->number<pPre->number){
p2->next=pBac;
pPre->next=p2;
return head;
}
else{
pPre=pBac;
pBac=pBac->next;
}
}
}
}
link create_link(link head){
head=new node;
head->number=-1;
head->next=NULL;
int m,i;
cout<<"請(qǐng)輸入本次所創(chuàng)建的圖書(shū)數(shù):\n";
cin>>m;
for(i=0;i<m;i++)
head=inserte_link1(head);
return head;
}
int print_link(link head){
link p1;
p1=head;
if(p1->next==NULL){
printstart();
cout<<"此成績(jī)表為空!\n";
printstart();
return 0;
}
printc();
while(p1->next){
cout<<p1->number<<'\t'<<p1->name<<'\t'<<p1->addr<<'\t'<<p1->writer<<'\t'<<p1->price<<endl;
p1=p1->next;
}
printstart();
return 0;
}
void menu(){
printf("\n\n\n");
printf("\t1載入書(shū)籍信息\t\t\t\t2刪除書(shū)籍信息\n\n");
printf("\t3全顯書(shū)籍信息\t\t\t\t4修改書(shū)籍信息\n\n");
printf("\t0退出系統(tǒng)\n\n");
printf("%*****************************************%");
printf("\n");
}
link delete_link(link head){
if(head==NULL){
cout<<"http:///////////////////////////\n";
cout<<"此成績(jī)表為空!\n";
cout<<"http:///////////////////////////\n";
return NULL;
}
link p1,p2;
int num;
cout<<"請(qǐng)輸入所要?jiǎng)h除書(shū)籍的號(hào)碼:\n";
cin>>num;
while(head!=NULL&&head->number==num){//所刪除的在鏈頭
p2=head;
head=head->next;
delete p2;
cout<<"已刪除!\n";
}
p1=head;
p2=head->next;
while(p2!=NULL){
if(p2->number==num){
p1->next=p2->next;
delete p2;
cout<<"已刪除!\n";
return head;
}
else
p1=p2;
p2=p1->next;
}
Nofind();
return head;
}
link modify_link(link head){
int num,number;
char *na=new char[20];
char *ad=new char[30];
char *writer=new char[12];
double price;
link p1;
p1=head;
cout<<"請(qǐng)輸入要修改書(shū)籍的號(hào)碼:\n";
cin>>num;
while(p1->next!=NULL){
if(p1->number==num){
cout<<"此書(shū)籍的信息為:\n";
printc();
cout<<p1->number<<'\t'<<p1->name<<'\t'<<p1->addr<<'\t'<<p1->writer<<'\t'<<p1->price<<endl;
cout<<"請(qǐng)輸入";
printc();
cin>>number>>na>>ad>>writer>>price;
p1->number=number;
strcpy(p1->name,na);
strcpy(p1->addr,ad);
strcpy(p1->writer,writer);
p1->price=price;
cout<<"修改成功!\n";
return head;
}
p1=p1->next;
}
Nofind();
return head;
}
void main(){
int t;
link head=NULL;
int choice;
do{
menu();
cout<<"請(qǐng)輸入操作的序號(hào)!\n";
cin>>choice;
switch(choice){
case 1:
head=create_link(head);
break;
case 2:
head=delete_link(head);
break;
case 3:
t=print_link(head);
break;
case 4:
head=modify_link(head);
break;
case 0:
cout<<"謝謝使用!\n";
exit(0);
default:
Wrong();
break;
}
}while(1);
}
(全國(guó)總部)河南省鄭州市金水區(qū)農(nóng)業(yè)路71號(hào)中州國(guó)際飯店1617-1618
+18937133779
zboao@qq.com
中博奧技術(shù)有限公司& 版權(quán)所有
工信部備案號(hào):豫ICP備11015869號(hào)-8