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