#include#include #include int nCount = 0; //书籍结构 typedef struct Node { struct Node * Blink; struct Node * Flink; char BookName[50]; float BookPrice; int BookNumber; }; struct Node * ndHeaderNode = NULL; //增加书籍的函数 struct Node * AppendNode(struct Node * CurrentNode, char * BookName, int BookNumber, float BookPrice) { struct Node * pNewNode = NULL; struct Node * pTempNode = NULL; struct Node * pHeadNode = CurrentNode; pNewNode = (struct Node *)malloc(sizeof(struct Node)); if (pNewNode == NULL) { printf("memory malloc failed!n"); return pNewNode; } if (CurrentNode == NULL) { CurrentNode = pNewNode; CurrentNode->Blink = NULL; CurrentNode->Flink = NULL; } else { while (pHeadNode->Flink != NULL) { pTempNode = pHeadNode; pHeadNode = pHeadNode->Flink; } pHeadNode->Flink = pNewNode; pHeadNode->Blink = pTempNode; } strcpy(pNewNode->BookName, BookName); pNewNode->BookPrice = BookPrice; pNewNode->BookNumber = BookNumber; pNewNode->Flink = NULL; nCount++; return CurrentNode; } //查询书籍的函数 void QueryNode(struct Node * HeaderNode, char * BookName) { if (HeaderNode == NULL) { printf("ERROR:HeaderNode == NULLn"); return; } if (strcmp(HeaderNode->BookName, BookName) == 0) { printf("书名:%sn", HeaderNode->BookName); printf("定价:%fn", HeaderNode->BookPrice); printf("书号:%dn", HeaderNode->BookNumber); return; } while (HeaderNode->Flink != NULL) { HeaderNode = HeaderNode->Flink; if (strcmp(HeaderNode->BookName, BookName) == 0) { printf("书名:%sn", HeaderNode->BookName); printf("定价:%fn", HeaderNode->BookPrice); printf("书号:%dn", HeaderNode->BookNumber); return; } } printf("Can Not Found!n"); } //修改书籍信息 void ModifyNode(struct Node * HeaderNode, char * BookName, float BookPrice) { if (HeaderNode == NULL) { printf("ERROR:HeaderNode == NULLn"); return; } if (strcmp(HeaderNode->BookName, BookName) == 0) { HeaderNode->BookPrice = BookPrice; printf("ModifyNode Success!n"); return; } while (HeaderNode->Flink != NULL) { HeaderNode = HeaderNode->Flink; if (strcmp(HeaderNode->BookName, BookName) == 0) { HeaderNode->BookPrice = BookPrice; printf("ModifyNode Success!n"); return; } } printf("ModifyNode Failed!n"); return; } //删除书籍的函数 void DeleteNode(struct Node * HeaderNode, char * BookName) { struct Node * pNode = NULL; pNode = HeaderNode; for (size_t i = 0; i < nCount; i++) { if (strcmp(pNode->BookName, BookName) == 0) { if (pNode == HeaderNode) { pNode = HeaderNode->Flink; free(HeaderNode); ndHeaderNode = pNode; HeaderNode = ndHeaderNode; nCount--; return; } if (pNode->Flink == NULL) { pNode->Blink->Flink = NULL; free(pNode); nCount--; printf("Delete Success!n"); return; } pNode->Blink->Flink = pNode->Flink; pNode->Flink->Blink = pNode->Blink; free(pNode); nCount--; printf("Delete Success!n"); return; } } } //将书籍内容写入文件 void WriteFile(struct Node * HeaderNode, char * szFilePath) { struct Node *p = HeaderNode; FILE * w = fopen(szFilePath, "wb"); if (w == NULL) { printf("open file failed!n"); system("pause"); fclose(w); exit(0);//0正常退出 1异常退出 } while (p) { //输出链表节点数据到屏幕 printf("%s ", p->BookName); printf("%f ", p->BookPrice); printf("%d ", p->BookNumber); printf("n"); //输出链表节点数据到文件output.txt fprintf(w, "%s ", p->BookName); fprintf(w, "%f ", p->BookPrice); fprintf(w, "%d", p->BookNumber); fprintf(w, "n"); p = p->Flink; } fprintf(w, "n"); fclose(w); return; } //读取文件内容 struct Node * ReadFile(char * szFilePath) { struct Node * head = (struct Node *)malloc(sizeof(struct Node)); head->Blink = NULL; head->Flink = NULL; char name[50]; memset(name, 0, 50); float price; int number; struct Node * p; struct Node * q; p = q = head; FILE * r = fopen(szFilePath, "rb"); if (r == NULL) { printf("open file failed!n"); system("pause"); fclose(r); exit(0);//0正常退出 1异常退出 } while (fscanf(r, "%s", name) != EOF) { q = (struct Node *)malloc(sizeof(struct Node)); fscanf(r, "%f", &price); fscanf(r, "%d", &number); strcpy(q->BookName, name); q->BookPrice = price; q->BookNumber = number; q->Blink = p; p->Flink = q; p = q; } p->Flink = NULL; return head->Flink; } //展示所有书籍信息 void show(struct Node * HeaderNode) { printf("书名:%sn", HeaderNode->BookName); printf("定价:%fn", HeaderNode->BookPrice); printf("书号:%dn", HeaderNode->BookNumber); while (HeaderNode->Flink != NULL) { HeaderNode = HeaderNode->Flink; printf("书名:%sn", HeaderNode->BookName); printf("定价:%fn", HeaderNode->BookPrice); printf("书号:%dn", HeaderNode->BookNumber); } } void Start() { while (1) { int nFlag = 0; int ReadFlag = 0; char szBookName[50]; float fBookPrice = 0; float fNewBookPrice = 0; int nBookNumber = 0; printf("请输入需要使用的功能:n"); printf("1.添加书籍信息n"); printf("2.查询书籍信息n"); printf("3.修改书籍信息n"); printf("4.删除书籍信息n"); printf("5.将书籍信息存入文件n"); printf("6.从文件中读取书籍信息n"); printf("7.展示所有书籍信息n"); printf("8.退出n"); scanf("%d", &ReadFlag); switch (ReadFlag) { case 1: //memset(szBookName, 0 ,50); printf("请输入书名:"); scanf("%s", szBookName); printf("请输入定价 :"); scanf("%f", &fBookPrice); printf("请输入书号:"); scanf("%d", &nBookNumber); //新增函数 ndHeaderNode = AppendNode(ndHeaderNode, szBookName, nBookNumber, fBookPrice); break; case 2: printf("请输入书名:"); scanf("%s", szBookName); //查询函数 QueryNode(ndHeaderNode, szBookName); break; case 3: printf("请输入书名:"); scanf("%s", szBookName); printf("请输入新的定价:"); scanf("%f", &fNewBookPrice); //code 修改的函数 ModifyNode(ndHeaderNode, szBookName, fNewBookPrice); break; case 4: printf("请输入书名:"); scanf("%s", szBookName); //删除函数 DeleteNode(ndHeaderNode, szBookName); break; case 5: //C:UsersrkvirDocumentsVisual Studio 2015Projects WriteFile(ndHeaderNode, "information.txt"); break; case 6: ndHeaderNode = ReadFile("information.txt"); break; case 7: show(ndHeaderNode); break; case 8: nFlag = 1; break; } if (nFlag) { break; } } } int main() { Start(); return 0; }



