当前位置:网站首页>Realization of readable and writable files in library management system with C language bidirectional linked list
Realization of readable and writable files in library management system with C language bidirectional linked list
2022-06-22 07:54:00 【Day-3】
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int nCount = 0;
// Book structure
typedef struct Node {
struct Node * Blink;
struct Node * Flink;
char BookName[50];
float BookPrice;
int BookNumber;
};
struct Node * ndHeaderNode = NULL;
// Add book functions
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;
}
// Functions for querying books
void QueryNode(struct Node * HeaderNode, char * BookName)
{
if (HeaderNode == NULL)
{
printf("ERROR:HeaderNode == NULL\n");
return;
}
if (strcmp(HeaderNode->BookName, BookName) == 0)
{
printf(" Title :%s\n", HeaderNode->BookName);
printf(" pricing :%f\n", HeaderNode->BookPrice);
printf(" Book number :%d\n", HeaderNode->BookNumber);
return;
}
while (HeaderNode->Flink != NULL)
{
HeaderNode = HeaderNode->Flink;
if (strcmp(HeaderNode->BookName, BookName) == 0)
{
printf(" Title :%s\n", HeaderNode->BookName);
printf(" pricing :%f\n", HeaderNode->BookPrice);
printf(" Book number :%d\n", HeaderNode->BookNumber);
return;
}
}
printf("Can Not Found!\n");
}
// Modify book information
void ModifyNode(struct Node * HeaderNode, char * BookName, float BookPrice)
{
if (HeaderNode == NULL)
{
printf("ERROR:HeaderNode == NULL\n");
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;
}
// Delete book functions
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;
}
}
}
// Write the contents of the book to a file
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 The normal exit 1 Abnormal exit
}
while (p)
{
// Output linked list node data to the screen
printf("%s ", p->BookName);
printf("%f ", p->BookPrice);
printf("%d ", p->BookNumber);
printf("\n");
// Output linked list node data to file 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;
}
// Read file contents
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 The normal exit 1 Abnormal exit
}
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;
}
// Show all book information
void show(struct Node * HeaderNode)
{
printf(" Title :%s\n", HeaderNode->BookName);
printf(" pricing :%f\n", HeaderNode->BookPrice);
printf(" Book number :%d\n", HeaderNode->BookNumber);
while (HeaderNode->Flink != NULL)
{
HeaderNode = HeaderNode->Flink;
printf(" Title :%s\n", HeaderNode->BookName);
printf(" pricing :%f\n", HeaderNode->BookPrice);
printf(" Book number :%d\n", 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(" Please enter the function you want to use :\n");
printf("1. Add book information \n");
printf("2. Search for book information \n");
printf("3. Modify book information \n");
printf("4. Delete book information \n");
printf("5. Store book information in a file \n");
printf("6. Read book information from file \n");
printf("7. Show all book information \n");
printf("8. sign out \n");
scanf("%d", &ReadFlag);
switch (ReadFlag)
{
case 1:
//memset(szBookName, 0 ,50);
printf(" Please enter the title of the book :");
scanf("%s", szBookName);
printf(" Please enter the pricing :");
scanf("%f", &fBookPrice);
printf(" Please enter the book number :");
scanf("%d", &nBookNumber);
// New function
ndHeaderNode = AppendNode(ndHeaderNode, szBookName, nBookNumber, fBookPrice);
break;
case 2:
printf(" Please enter the title of the book :");
scanf("%s", szBookName);
// Query function
QueryNode(ndHeaderNode, szBookName);
break;
case 3:
printf(" Please enter the title of the book :");
scanf("%s", szBookName);
printf(" Please enter the new pricing :");
scanf("%f", &fNewBookPrice);
//code Modified function
ModifyNode(ndHeaderNode, szBookName, fNewBookPrice);
break;
case 4:
printf(" Please enter the title of the book :");
scanf("%s", szBookName);
// Delete function
DeleteNode(ndHeaderNode, szBookName);
break;
case 5:
//C:\Users\rkvir\Documents\Visual Studio 2015\Projects
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;
}
边栏推荐
猜你喜欢
随机推荐
Crmeb mall distribution function
Open source open source version - pintuan
CollectionViewCell
Open source open source version - release products
4 solutions de court - circuit et 2 solutions d'arbre de génération minimum
Semaphore
Upload your own library to pod
Unity AssetBundle load
Applet vant UI implementation calls interface data and displays it
Model electricity experiment -- Experiment 1 transistor common emitter single transistor amplifier
What is distributed transaction
AutoCAD 2020.3 Chinese Version (old version)
XMIND 2022 mind map active resources?
Do you want to modify the title of the website
Open version - account information synchronization and unification
模板代码概述
What are uniapp, wap2app and 5 + app in dccloud?
C语言双向链表实现图书管理系统 可读写文件
Blob format problems involved in image uploading
mysql查询group by 1055 问题完美解决,最简单最便捷的方法




![[普通物理]波的能量与干涉](/img/fe/066aa9e8ed776b8f069b59b7123367.png)



