C語言開發東北大學20級大作業—活力長者社群(附原始碼)

自由散漫慣發表於2020-12-14

活力長者社群

東北大學20級大作業—活力長者社群
開發語言:C語言
開發者:20級軟體2009楊富超等
使用工具:vs2019
CSDN原始碼下載:檔案還未通過稽核
任何疑問歡迎留言

一,系統使用展示(部分)

在這裡插入圖片描述

1,yufuchao.h
在這裡插入圖片描述
2,長者社群.cpp
在這裡插入圖片描述
3,檔案需要
在這裡插入圖片描述

二,系統功能介紹

1,系統功能介紹

在這裡插入圖片描述

1,會員管理(新建,查詢,修改,刪除)
2,房屋管理(新建,查詢,修改,刪除)
3,入住管理(會員入住處理,入住資訊查詢)
4,娛樂設施管理(新建,查詢,修改,刪除)
5,使用者管理(新建,查詢,修改,刪除)
6,檔案管理(儲存資料到檔案,列印檔案資料,清空檔案)
0,退出系統

2,系統main函式,while迴圈在外,系統程式能夠持續執行,switch判斷語句進行功能選擇與函式切換。

    int  main(void)//主函式
    {
	system("color 0E");//改變字型顏色
	while (1)
	{
		Menu();//列印選單
		char ch = getchar();

		switch (ch)
		{
		case '1':
			MemberManagement();//會員管理功能
			break;
		case '2':
			HouseManagement();//房屋管理功能
			break;
		case '3':
			PersonManagement();//會員入住管理功能
			break;
		case '4':
			AmusementManagement();//娛樂設施管理功能
			break;
		case '5':
			UserManagement();//使用者管功能
			break;
		case '6':
			FileMenu();//檔案資料操作功能
			break;
		case '0':
			return 0;//退出系統
			break;
		default:
			printf("輸入有誤,沒有該功能\n\n");
			system("pause");//暫停
			system("cls");//清屏
			break;
		}
	}

	return 0;
}

3,全域性共用結構體

偷懶了,為了減少程式碼量,用了共用結構體

//全域性結構體!!!
struct Entity {
	char name[10] = { '\0' };//姓名,名稱
	char name1[10] = { '\0' };
	char work[10] = { '\0' };//職位
	int  message = 0;//入住
	long long int number = 0;//電話號碼,可使用人數
	struct Entity* next;

};
//全域性頭節點,尾節點
struct Entity* head1, * end1;//房屋
struct Entity* head2, * end2;//會員
struct Entity* head3, * end3;//設施
struct Entity* head4, * end4;//使用者

4,標頭檔案

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#include <conio.h>
#include<windows.h>//標頭檔案ok!

前言

肝這個系統很久了,(也因此寫出了我的第一篇CSDN)
這是我做的第一個較大的系統,U1S1,淚目
一個人肝了快1200多行,
共1490行,
共實現了33個函式功能,
包括連結串列新建,刪除,檔案的儲存,刪除,清空,查詢,修改等等
(初心:用最少的程式碼幹最多的事)
今天它終於成年了,
從嬰兒到青年,到少年。
挺不容易的,學到了很多C的知識。
也體會到,優化是無止境的,想法在老腦子裡

但是,應該不會再優化它了,事太多了,挺捨不得的,做了這麼久了,把他當兒子,自己像個老父親,雖然它經常出bug,熬夜禿頭多次,一次次優化,長大成人,很奇妙的感覺,成就感有,也有一絲絲傷感與解脫,不再為它熬夜了。還有考試,大創前端,陪你到這兒,不拖了!

作業要求
在這裡插入圖片描述

二,選單

在這裡插入圖片描述

1,選單展示

void Menu() {
	printf("*************************************************\n");
	printf("*\t歡迎使用活力長者社群系統\t\t*\n");
	printf("*\t\t請選擇功能\t\t\t*\n");
	printf("*************************************************\n");
	printf("*\t\t1.會員管理\t\t\t*\n");//ok
	printf("*\t\t2.房屋管理\t\t\t*\n");//ok
	printf("*\t\t3.入住管理\t\t\t*\n");
	printf("*\t\t4.娛樂設施管理\t\t\t*\n");
	printf("*\t\t5.使用者管理\t\t\t*\n");
	printf("*\t\t6.檔案管理\t\t\t*\n");//ok
	printf("*\t\t0.退出系統\t\t\t*\n");//ok
	printf("*************************************************\n");
}

2,列印選單

	//列印選單
	Menu();
	//讀取一個字元 整數,字元在記憶體中對映為ASCII碼
	char ch = getchar();

三,會員管理

在這裡插入圖片描述

1,會員管理選單

用printf列印,再用while迴圈,switch選擇,break退出

void MemberManagement() {
	system("cls");

	while (1) {
		system("cls");
		printf("*************************************************\n");
		printf("*\t歡迎使用會員管理功能\t\t\t*\n");
		printf("*\t\t請選擇功能\t\t\t*\n");
		printf("*************************************************\n");
		printf("*\t\t1.新建會員\t\t\t*\n");//ok
		printf("*\t\t2.查詢會員\t\t\t*\n");//ok
		printf("*\t\t3.修改會員\t\t\t*\n");
		printf("*\t\t4.刪除會員\t\t\t*\n");
		printf("*\t\t0.返回   \t\t\t*\n");//ok
		printf("*************************************************\n");

		char b = _getch();
		if (b == '0')//輸入0.退出迴圈
			break;
		switch (b)
		{
		case '1':
			MemberNew();//新建會員
			break;
		case '2':
			MemberSeek();//查詢會員
			break;
		case '3':
			MemberChange();//修改會員
			break;
		case '4':
			MemberDelete();//刪除會員
			break;
		default:
			printf("輸入有誤,沒有該功能\n\n");
			system("pause");
			system("cls");
			break;
		}

	}
	system("cls");
}

2,新建會員

1, 運用了連結串列新建,使用while,使可以達到多次輸入,自己選擇退出的目標
2,注意head2全域性頭節點,方便後面使用,把連結串列儲存在檔案中
3,創新思想:這裡關於房屋選擇,我的辦法是我把房屋資訊列印出來,再由會員自己選擇房屋(手動輸入名稱)
4,會員資訊:姓名,手機號碼,所選房屋

void MemberNew() {
	int flag = 2;
	//判斷頭節點是否為空,並找到尾節點
	while (head2 != NULL && end2->next != NULL)
	{
		end2 = end2->next;
	}
	//列印房屋檔案
	Fangwufile();
	while (flag != 1)//判斷是否退出迴圈
	{   //建立一個會員,在堆中分配記憶體 
		struct Entity* node = (struct Entity*)malloc(sizeof(struct Entity));
		//判斷頭節點是否為空
		if (head2 == NULL) {
			head2 = node;
			end2 = head2;

		}
		//錄入會員資訊
		memset(node, 0, sizeof(struct Entity));//
		printf("請輸入新建會員的名字\n");
		memset(node->name, '0', sizeof(node->name));
		scanf("%s", node->name);
		printf("請輸入新建會員的手機號碼\n");
		scanf_s("%lld", &node->number);//&指標得到值
		printf("請輸入新建會員選擇的房型\n");
		scanf("%s", node->work);
		puts("恭喜房屋購買成功");
		printf("是否需要繼續輸入?否(1),是(2)\n");
		scanf("%d", &flag);
		end2->next = node;
		end2 = node;
		node->next = NULL;
	}
	system("cls");
	puts("請記得儲存會員資訊!");
	system("pause");
	system("cls");
}

3,查詢會員

1,這裡實現的是在檔案中查詢資料( 並不是連結串列 ),並列印出來
2,使用的是fscanf,fscanf返回值為得到的引數個數
3, 注意fscanf的使用是把資料儲存在快取中
4,實現在檔案中查詢int(整型資料)

void MemberSeek()
{    //檔案指標
	FILE* fp;
	if ((fp = fopen(".\\會員資訊.txt", "r")) == NULL)
	{
		printf("開啟會員資訊.txt檔案失敗\n");
		return;
	}
	else
	{   //查詢的會員號碼(11位),所以用long long 
		long long int m;
		printf("輸入會員的電話號碼:");
		scanf("%lld", &m);
	   //在堆中分配記憶體
		struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
		while (1)
		{
          
			int nRead = fscanf(fp, "%s %lld %s", q->name, &q->number, q->work);//nRead等於要輸出引數的個數
           //逐個比較尋找
			if (3 == nRead && q->number == m)
			{
				puts("*購買人\t*電話號碼\t*所購買的房型\t*");
				printf("*%s\t*%lld\t*%s\n", q->name, q->number, q->work);
				free(q);
				break;
			}
			//判斷是否到結尾也沒有找到
			else if (nRead != 3)
			{
				puts("對不起查詢不到會員資訊");
				break;
			}
		}
	}
	fclose(fp);//關閉檔案
	system("pause");
	system("cls");


}

4,修改會員

功能: 實現在檔案中修改已儲存的資料
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!

void MemberChange() {
	FILE* fp;
	FILE* fp1;
	long long int c = 0;
	fp = fopen(".\\會員資訊.txt", "r+");
	fp1 = fopen(".\\linshi.txt", "w+");//新建一個臨時檔案
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* p1 = (struct Entity*)malloc(sizeof(struct Entity));
	puts("請輸入你要修改會員的電話號碼");
	scanf("%lld", &p->number);
	while (fscanf(fp, "%s %lld %s", p1->name, &p1->number, p->work) != EOF)//從原檔案讀一個結點
	{
        
		if (p->number != p1->number)//不是要修改的內容
		{
			fprintf(fp1, "%s %lld %s\n", p1->name, p1->number, p->work);
		}
		else
		{  //重新錄入會員資料
			puts("請輸入會員的姓名");
			scanf("%s", p1->name);
			puts("請輸入會員的電話號碼");
			scanf("%lld", &p1->number);
			puts("請輸入會員所購買的房型");
			scanf("%s", p1->work);
			fprintf(fp1, "%s %lld %s\n", p1->name, p1->number, p->work);



		}

	}
	free(p);
	free(p1);
	fclose(fp);
	fclose(fp1);
	remove(".\\會員資訊.txt");//移除原檔案
	rename("linshi.txt", ".\\會員資訊.txt");//把linshi檔案重新命名為原檔名
}

5,刪除會員

功能:實現在檔案中對會員資料進行查詢並刪除
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!

void MemberDelete() {
	FILE* fp;
	FILE* fp1;
	fp = fopen(".\\會員資訊.txt", "r+");
	fp1 = fopen(".\\linshi.txt", "w+");//新建一個臨時檔案
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* p1 = (struct Entity*)malloc(sizeof(struct Entity));
	puts("請輸入你要刪除會員的電話號碼");
	scanf("%lld", &p->number);
	while (fscanf(fp, "%s %lld %s", p1->name, &p1->number, p->work) != EOF)//從原檔案讀一個結點
	{

		if (p->number != p1->number)//不是要刪除的內容
		{
			fprintf(fp1, "%s %lld %s\n", p1->name, p1->number, p->work);
		}
	}
	puts("恭喜您刪除成功");
	free(p);
	free(p1);
	fclose(fp);
	fclose(fp1);
	remove(".\\會員資訊.txt");
	rename("linshi.txt", ".\\會員資訊.txt");
}

四,房屋管理

1,房屋選單

在這裡插入圖片描述

清屏,while,switch

void HouseManagement()
{
	system("cls");

	while (1) {
		printf("*************************************************\n");
		printf("*\t歡迎使用房屋管理功能\t\t\t*\n");
		printf("*\t\t請選擇功能\t\t\t*\n");
		printf("*************************************************\n");
		printf("*\t\t1.新建房屋\t\t\t*\n");
		printf("*\t\t2.修改房屋資訊\t\t\t*\n");
		printf("*\t\t3.刪除房屋資訊\t\t\t*\n");
		printf("*\t\t4.查詢房屋購買資訊\t\t*\n");
		printf("*\t\t0.返回   \t\t\t*\n");
		printf("*************************************************\n");

		char b = _getch();
		if (b == '0')
			break;
		switch (b)
		{
		case '1':
			HouseNew();
			break;
		case '2':
			HouseChange();
			break;
		case '3':
			HouseDelete();
			break;
		case '4':
			Huiyuanfile();
			break;
		default:
			printf("輸入有誤,沒有該功能\n\n");
			system("pause");
			system("cls");
			break;
		}

	}
	system("cls");
}

1,新建房屋

通過連結串列來新建,新建完後需要儲存資料!
房屋資訊:房屋型別,面積(m^2)

void HouseNew()
{
	int flag = 2;


	while (head1 != NULL && end1->next != NULL)
	{
		end1 = end1->next;
	}

	while (flag != 1)
	{
		struct Entity* node = (struct Entity*)malloc(sizeof(struct Entity));

		if (head1 == NULL) {
			head1 = node;
			end1 = head1;

		}
		memset(node, 0, sizeof(struct Entity));
		printf("請輸入新建房屋的型別(商品房等)\n");
		scanf("%s", node->name);
		printf("請輸入新建房屋的面積(m^2)\n");
		scanf_s("%lld", &node->number);//&指標得到值
		printf("是否需要繼續輸入?否(1),是(2)\n");
		scanf("%d", &flag);
		end1->next = node;
		end1 = node;
		node->next = NULL;
	}
	system("pause");
	system("cls");

}

2,修改房屋資訊

實現在檔案中查詢字串
關鍵函式:strcmp
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!

void HouseChange(){
	FILE* fp;
	FILE* fp1;
	fp = fopen(".\\房屋資訊.txt", "r+");
	fp1 = fopen(".\\linshi.txt", "w+");//讀新建一個臨時檔案
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* p1 = (struct Entity*)malloc(sizeof(struct Entity));
	puts("請輸入你要修改房屋的名稱");
	scanf("%s", p->name);
	while (fscanf(fp, "%s %lld", p1->name, &p1->number) != EOF)//從原檔案讀一個結點
	{
		int abc = strcmp(p->name, p1->name);
		if (abc != 0)//不是要改變的內容
		{
			fprintf(fp1, "%s %lld\n", p1->name, p1->number);
		}
		else
		{
			puts("請輸入新修改房屋的名稱");
			scanf("%s", p1->name);
			puts("請輸入新修改的房屋的面積");
			scanf("%lld", &p1->number);
			fprintf(fp1, "%s %lld\n", p1->name, p1->number);

		}

	}
	free(p);
	free(p1);
	fclose(fp);
	fclose(fp1);
	remove(".\\房屋資訊.txt");
	rename("linshi.txt", ".\\房屋資訊.txt");
	system("cls");
	puts("恭喜您修改成功");
	system("pause");
	system("cls");

}

3,刪除房屋資訊

實現在檔案中查詢字串
關鍵函式:strcmp
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!

void HouseDelete(){
	FILE* fp;
	FILE* fp1;
	fp = fopen(".\\房屋資訊.txt", "r+");
	fp1 = fopen(".\\linshi.txt", "w+");//讀新建一個臨時檔案
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* p1 = (struct Entity*)malloc(sizeof(struct Entity));
	puts("請輸入你要刪除房屋的名稱");
	scanf("%s", p->name);
	while (fscanf(fp, "%s %lld", p1->name, &p1->number) != EOF)//從原檔案讀一個結點
	{
		int abc = strcmp(p->name, p1->name);
		if (abc != 0)//不是要改變的內容
		{
			fprintf(fp1, "%s %lld\n", p1->name, p1->number);
		}
		
	}
	free(p);
	free(p1);
	fclose(fp);
	fclose(fp1);
	remove(".\\會員資訊.txt");
	rename("linshi.txt", ".\\會員資訊.txt");
	system("cls");
	puts("恭喜您刪除成功");
	system("pause");
	system("cls");
}

4,查詢房屋資訊

房屋資訊即會員購買資訊,那麼我們這裡就可以直接引用會員資訊列印函式

//會員資訊列印
void Huiyuanfile()
{
	system("cls");
	FILE* fp;
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
	if ((fp = fopen(".\\會員資訊.txt", "r")) == NULL)
	{
		printf("開啟會員資訊.txt檔案失敗\n");
		return;
	}
	else
	{
		puts("**********************************");
		puts("*購買人\t\t*電話號碼\t*所購買的房型\t*");
		while (1)
		{

			int nRead = fscanf(fp, "%s %lld %s", q->name, &q->number, q->work);//nRead等於要輸出引數的個數
			if (3 == nRead)
			{
				printf("*%-10s\t*%-lld\t*%-10s\n", q->name, q->number, q->work);
				p->next = q;
				p = q;
			}
			else
			{
				free(q);
				break;
			}
		}
		puts("**********************************");
	}
	p->next = NULL;
	fclose(fp);
	system("pause");
	system("cls");
}

== 五,入住管理==

1,入住管理選單

在這裡插入圖片描述

while迴圈,使用system(“cls”)清屏

//選單
void PersonManagement()
{
	system("cls");

	while (1)
	{
		system("cls");
		puts("***********************************************");
		puts("*\t歡迎使用入住管理功能\t              *");
		puts("*\t\t\t                      *");
		puts("*\t1.會員入住處理 \t\t\t*");
		puts("*\t2.入住資訊查詢 \t\t\t*");
		puts("*\t0.返回 \t\t\t\t*");
		puts("***********************************************");
		char b = _getche();
		if (b == '0')
			break;
		switch (b)
		{
		case '1':
			Person();
			break;
		case '2':
			Personfile();
			break;
		default:
			printf("輸入有誤,沒有該功能\n\n");
			system("pause");
			system("cls");
			break;
		}

	}
	system("cls");
}

2,會員入住管理

1,從會員資訊.txt中讀取資料,找到會員
2,把找到的會員資料輸入入住資訊。txt中,並加入一個數字(1or2or3),方便後面列印入住資訊時使用,也方便會員錄入

3,if判斷入住還是申請設施使用
4,Sleep(毫秒數)為Windo.h標頭檔案包含

//會員入住處理
void Person()
{
	system("cls");
	FILE* fp;
	FILE* fp1;
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	if ((fp1 = fopen(".\\入住資訊.txt", "a+")) == NULL)
	{
		printf("開啟入住資訊.txt檔案失敗,請聯絡管理人員處理\n");
		system("pause");
		return;
	}
	if ((fp = fopen(".\\會員資訊.txt", "r")) == NULL)
	{
		printf("開啟會員資訊.txt檔案失敗\n");
		system("pause");
		return;
	}
	else
	{
		long long int m;
		puts("********************************************************");
		printf("輸入入住的會員的電話號碼:");
		scanf("%lld", &m);
		puts("*購買人 \t*電話號碼\t*所購買的房型*\t");
		while (1)
		{
			struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
			int nRead = fscanf(fp, "%s %lld %s", q->name, &q->number, q->work);//nRead等於要輸出引數的個數
			if (3 == nRead && q->number == m)
			{
				fprintf(fp1, "%s %11d %s", q->name, q->number, q->work);
				printf("*%-10s\t*%-lld\t*%-10s\t\n", q->name, q->number, q->work);
				puts("*入住輸入1,申請設施輸入2");//選擇功能
				int b = 0;
				scanf("%d", &b);
				if (b == 1) //入住
					puts("*請輸入:""1(入住)""or""2(出租)""or3(空置)""");
					scanf_s("%d", &q->message);
					fprintf(fp1, "    %d\n", q->message);
					if (q->message == 1)
					{
						system("cls");
						puts("恭喜入住成功!");
					}
					else if (q->message == 2)
					{
						system("cls");
						puts("恭喜出租成功");
					}
					else
					{
						system("cls");
						puts("恭喜空置成功");
					}
					free(q);
					break;

				}
				else//申請設施
				{
					system("cls");
					Sheshifile();//列印已有的設施
					AmusementSeek();//搜尋需要使用的設施
					puts("設施使用完畢");
					Sleep(4000);//螢幕暫停4s
					free(q);
					break;
				}
			}
			else
			{
				if (!feof(fp))
				{
					p->next = q;
					p = q;
				}
				else
				{
					puts("抱歉,該會員未購買房屋,我們這兒不允許白嫖");//手動狗頭
					break;
				}
			}
		}
		p->next = NULL;
		fclose(fp);
		system("pause");
		system("cls");



	}
}  


}

3,入住資訊查詢

在這裡插入圖片描述

while遍歷
創新點:用strcpy函式實現把之前的數字(1,2,3)變成(入住,出租,閒置)

//列印入住會員的資訊
void Personfile() {
	system("cls");
	FILE* fp;
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
	if ((fp = fopen(".\\入住資訊.txt", "r")) == NULL)
	{
		printf("開啟入住資訊.txt檔案失敗\n");
		return;
	}
	else
	{
		puts("******************************************************");
		printf("*購買人\t*電話號碼\t*所購買的房型\t");
		printf("*入住資訊\t*\n");
		while (1)
		{   
			struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));//在堆中分配空間
			int nRead = fscanf(fp, "%s %lld %s %d", q->name, &q->number, q->work, &q->message);//nRead等於要輸出引數的個數
			if (4 == nRead)
			{
				char b[20] = "\0";
				if (q->message == 1)
					strcpy(b, "入住");
				else if (q->message == 2)
					strcpy(b, "出租");
				else strcpy(b, "閒置");
				printf("*%-10s\t*%-lld\t*%-10s\t*%-10s\n", q->name, q->number, q->work, b);
				p->next = q;
				p = q;
			}
			else
			{
				free(q);
				break;
			}
		}
	}
	p->next = NULL;
	fclose(fp);
	system("pause");
	system("cls");
}

六,娛樂設施管理

在述

1,娛樂設施管理選單

while
創新點:用了_getch,好處不用按enter,直接就能繼續執行

void AmusementManagement()
{
	system("cls");

	while (1) {
		printf("*************************************************\n");
		printf("*\t歡迎使用設施管理功能\t\t\t*\n");
		printf("*\t\t請選擇功能\t\t\t*\n");
		printf("*************************************************\n");
		printf("*\t\t1.新建設施資訊\t\t\t*\n");//ok
		printf("*\t\t2.修改設施資訊\t\t\t*\n");//ok
		printf("*\t\t3.刪除設施資訊   \t\t*\n");//ok
		printf("*\t\t0.返回   \t\t\t*\n");//ok
		printf("*************************************************\n");

		char b = _getch();
		if (b == '0') break;
		switch (b)
		{
		case '1':
			AmusementNew();
			break;
		case '2':
			AmusementChange();
			break;
		case '3':
			AmusementDelete();
		default:
			printf("輸入有誤,沒有該功能\n\n");
			system("pause");
			system("cls");
			break;
		}

	}
	system("pause");
	system("cls");
}

2,新建娛樂設施

while循還,用一個判斷來決定是否輸入,更加人性化
設施資訊:名稱,可使用人數

void AmusementNew() {
	system("cls");
	int flag = 2;
	while (head3 != NULL && end3->next != NULL)
	{
		end3 = end3->next;
	}
	puts("***************************************");
	while (flag != 1)//判斷是否繼續,很常用的一個程式碼思想
	{
		struct Entity* node = (struct Entity*)malloc(sizeof(struct Entity));

		if (head3 == NULL) {//判斷是否頭節點為空
			head3 = node;
			end3 = head3;

		}
		memset(node, 0, sizeof(struct Entity));//清空結構體
		//錄入資料
		printf("*\t請輸入新建設施的名稱:\t\t*\n");
		scanf("%s", node->name);
		printf("*\t請輸入設施可以使用的人數: \t\n");
		scanf_s("%lld", &node->number);//&指標得到值
		printf("*\t是否需要繼續輸入?否(1),是(2)\t*\n");
		scanf("%d", &flag);
		end3->next = node;
		end3 = node;
		node->next = NULL;//最後尾節點指向空(NULL)
	}
	system("cls");
	puts("請記得儲存設施資訊!");
	system("pause");
	system("cls");
}

3,搜尋娛樂設施資訊

在這裡插入圖片描述

此函式作用:在申請娛樂設施時的選擇設施(也就是查詢)
得不到資料,debug了很久。。。。解決後,獎勵一杯快樂水

//搜尋seek
void AmusementSeek()
{
	FILE* fp;
	struct Entity* p2 = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
	if ((fp = fopen(".\\娛樂設施資訊.txt", "r")) == NULL)
	{
		printf("開啟娛樂設施資訊.txt檔案失敗\n");
		return;
	}
	else
	{
		printf("請輸入娛樂設施的名稱:");
		scanf("%s", p2->name);
		while (1)
		{

			int nRead = fscanf(fp, "%s %lld", q->name, &q->number);//nRead等於要輸出引數的個數
			int abc = strcmp(p2->name, q->name)//相同返回為0
			printf("%d", abc);
			if (2 == nRead && abc==0)
			{
				puts("*娛樂設施名稱\t*可使用人數\t*");
				printf("*%-10s\t*%-lld\t\n", q->name, q->number);
				free(q);//釋放空間
				break;
			}
			else if (nRead != 2)
			{
				puts("對不起沒用此娛樂設施資訊");
				break;
			}
		}
	}
	fclose(fp);
	system("pause");

} 

4,修改娛樂設施資訊

實現 :在檔案中找到資料,並進行資料修改,並不改變其他資料!
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!

void AmusementChange()
{
	FILE* fp2;
	FILE* fp3;
	long long int c = 0;
	fp2 = fopen(".\\娛樂設施資訊.txt", "r+");
	fp3 = fopen(".\\linshi2.txt", "w+");//新建一個臨時檔案
	struct Entity* p2 = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* p3 = (struct Entity*)malloc(sizeof(struct Entity));
	puts("請輸入你要修改設施的名稱");
	scanf("%s", &p2->name);
	while (fscanf(fp2, "%s %lld", p3->name, &p3->number) != EOF)//從原檔案讀一個結點
	{
		int abc = strcmp(p2->name, p3->name);
		if (abc != 0)//不是要改變的內容
		{ 
			fprintf(fp3, "%s %lld\n", p3->name, p3->number);
		}
		else
		{
			puts("請輸入新修改的設施的名稱");
			scanf("%s", p3->name);
			puts("請輸入新修改的設施可以使用的人數");
			scanf("%lld", &p3->number);

			fprintf(fp3, "%s %lld \n", p3->name, p3->number);



		}

	}
	free(p2);
	free(p3);
	fclose(fp2);
	fclose(fp3);
	remove(".\\娛樂設施資訊.txt");
	rename("linshi2.txt", ".\\娛樂設施資訊.txt");
	system("cls");
	puts("恭喜您修改成功");
	system("pause");
	system("cls");
}

5,刪除設施資訊

通過一個while循還遍歷,和if來判斷是否是需要刪除的資料
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!

void AmusementDelete() {
	FILE* fp4;
	FILE* fp5;
	fp4 = fopen(".\\娛樂設施資訊.txt", "r+");
	fp5 = fopen(".\\linshi.txt", "w+");//新建一個臨時檔案
	struct Entity* p4 = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* p5 = (struct Entity*)malloc(sizeof(struct Entity));
	puts("請輸入你要刪除設施的名稱");
	scanf("%s", &p4->name);
	while (fscanf(fp4, "%s %lld", p5->name, &p5->number) != EOF)//從原檔案讀一個結點
	{ 
		int abc = strcmp(p4->name,p5->name);
		if (abc != 0)//不是要刪除的內容
		{
			fprintf(fp5, "%s %lld\n", p5->name, p5->number);
		}
	}
	free(p4);
	free(p5);
	fclose(fp4);
	fclose(fp5);
	remove(".\\娛樂設施資訊.txt");
	rename("linshi.txt", ".\\娛樂設施資訊.txt");
	system("cls");
	puts("恭喜您刪除成功");
	system("pause");
	system("cls");
}

七,使用者管理

ps:這個功能函式的檔案儲存存在延遲,有時需要退出系統後,檔案資料才會儲存到檔案中
執行時,可能不會看到檔案的實時變化

1,使用者管理選單

在這裡插入圖片描述

清屏,while,_getche()

void UserManagement() {
	system("cls");

	while (1) {
		printf("*************************************************\n");
		printf("*\t歡迎使用使用者管理功能\t\t\t*\n");
		printf("*\t                    \t\t\t*\n");
		printf("*\t\t請選擇功能\t\t\t*\n");
		printf("*************************************************\n");
		printf("*\t\t1.新建使用者\t\t\t*\n");//ok
		printf("*\t\t2.查詢使用者\t\t\t*\n");//ok
		printf("*\t\t3.修改使用者\t\t\t*\n");
		printf("*\t\t4.刪除使用者\t\t\t*\n");
		printf("*\t\t5.設定服務物件\t\t\t*\n");
		printf("*\t\t6.查詢服務物件\t\t\t*\n");
		printf("*\t\t0.返回   \t\t\t*\n");//ok
		printf("*************************************************\n");

		char b = _getche();
		if (b == '0')
			break;
		switch (b)
		{
		case '1':
			UserNew();
			break;
		case '2':
			UserSeek();
			break;
		case '3':
			UserChange();
			break;
		case '4':
			UserDelete();
			break;
		case '5':
			UserPerson();
			break;
		case '6':
			PersonUserfile();
			break;
		default:
			printf("輸入有誤,沒有該功能\n\n");
			system("pause");
			system("cls");
			break;
		}

	}
	system("cls");
}

2,新建使用者

通過連結串列建立新的節點,記得儲存到檔案中
使用者資訊:名字,職務,電話號碼

void UserNew() {
	int flag = 2;


	while (head4 != NULL && end4->next != NULL)
	{
		end4 = end4->next;
	}
	while (flag != 1)
	{
		struct Entity* node = (struct Entity*)malloc(sizeof(struct Entity));

		if (head4 == NULL)
		{
			head4 = node;
			end4 = head4;

		}
		memset(node, 0, sizeof(struct Entity));
		printf("*\t請輸入服務人員的名字\t*\n");
		memset(node->name, '0', sizeof(node->name));
		scanf("%s", node->name);
		printf("*\t請輸入其職務\t*\n");
		scanf("%s", node->work);
		printf("*\t請輸入其的手機號碼\t*\n");
		scanf_s("%lld", &node->number);//&指標得到值

		printf("是否需要繼續輸入?否(1),是(2)\n");
		scanf("%d", &flag);
		end4->next = node;
		end4 = node;
		node->next = NULL;
	}
	system("cls");
	puts("請記得儲存使用者資訊!");
	system("pause");
	system("cls");
}

3,查詢使用者

通過電話號碼查詢

void UserSeek() {
	FILE* fp1;
	long long int n;
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	if ((fp1 = fopen(".\\使用者資訊.txt", "r")) == NULL)
	{
		printf("開啟使用者資訊.txt檔案失敗\n");
		return;
	}
    puts("輸入服務人員電話號碼");
	scanf("%lld", &n);
	while (1)
	{

		struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
		int nRead = fscanf(fp1, "%s %lld %s ", q->name, &q->number, q->work);//nRead等於要輸出引數的個數
		if (3 == nRead && q->number == n)
		{
			puts("********************************");
			puts("*姓名\t\t*職務\t\t*電話號碼*");
			printf("*%-10s\t*%-10s\t*%-lld\n", q->name, q->work, q->number);

			puts("********************************");
			free(q);
			break;
		}
		else
		{
			p->next = q;
			p = q;

		}
	}
	p->next = NULL;
	fclose(fp1);
	system("pause");
	system("cls");
}

4,修改使用者

通過電話號碼找到資料,再對其進行重新輸入
創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!

void UserChange()
{
	FILE* fp;
	FILE* fp1;
	long long int c = 0;
	fp = fopen(".\\使用者資訊.txt", "r+");
	fp1 = fopen(".\\linshi.txt", "w+");//讀新建一個臨時檔案
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* p1 = (struct Entity*)malloc(sizeof(struct Entity));
	puts("請輸入你要修改使用者的電話號碼");
	scanf("%lld", &p->number);
	while (fscanf(fp, "%s %lld %s", p1->name, &p1->number, p->work) != EOF)//從原檔案讀一個結點
	{

		if (p->number != p1->number)//不是要刪除的內容
		{
			fprintf(fp1, "%s %lld %s\n", p1->name, p1->number, p->work);
		}
		else
		{
			puts("請輸入使用者的姓名");
			scanf("%s", p1->name);
			puts("請輸入使用者的電話號碼");
			scanf("%lld", &p1->number);
			puts("請輸入使用者的職務");
			scanf("%s", p1->work);
			fprintf(fp1, "%s %lld %s\n", p1->name, p1->number, p->work);
		}

	}
	free(p);
	free(p1);
	fclose(fp);
	fclose(fp1);
	remove(".\\使用者資訊.txt");
	rename("linshi.txt", ".\\使用者資訊.txt");
	puts("恭喜您修改成功");
	system("pause");
	system("cls");

}

5, 刪除使用者資料

創新思想:建立一個臨時檔案,再把需要的資料輸入到臨時檔案中,再把原始檔移除
再把臨時檔案重新命名。ok!

void UserDelete()
{
	FILE* fp;
	FILE* fp1;
	fp = fopen(".\\使用者資訊.txt", "r+");
	fp1 = fopen(".\\linshi.txt", "w+");//讀新建一個臨時檔案
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* p1 = (struct Entity*)malloc(sizeof(struct Entity));
	puts("請輸入你要刪除使用者的電話號碼");
	scanf("%lld", &p->number);
	while (fscanf(fp, "%s %lld %s", p1->name, &p1->number, p->work) != EOF)//從原檔案讀一個結點
	{

		if (p->number != p1->number)//不是要刪除的內容
		{
			fprintf(fp1, "%s %lld %s\n", p1->name, p1->number, p->work);
		}
	}
	free(p);
	free(p1);
	fclose(fp);
	fclose(fp1);
	remove(".\\使用者資訊.txt");
	rename("linshi.txt", ".\\使用者資訊.txt");
	puts("恭喜您刪除成功");
	system("pause");
	system("cls");
}

6,設定服務物件

2個檔案,一個使用者資訊.txt,一個服務物件資訊

void UserPerson(){
	system("cls");	
	long long int n;
	FILE* fp1;
	FILE* fp2;
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
	if ((fp1 = fopen(".\\使用者資訊.txt", "r")) == NULL)
	{
		printf("開啟使用者資訊.txt檔案失敗\n");
		return;
	}
	if ((fp2 = fopen(".\\服務物件資訊.txt", "a+")) == NULL)
	{
		printf("開啟服務人員資訊.txt檔案失敗\n");
		return;
	}
	puts(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
	puts("*輸入服務人員電話號碼");//設定服務人員
	scanf("%lld", &n);
	while (1)
	{

		int nRead = fscanf(fp1, "%s %lld  %s", q->name, &q->number, q->work);//nRead等於要輸出引數的個數
		if (3 == nRead && q->number == n)//找到服務物件
		{
			puts("********************************");
			puts("*姓名\t*職務\t*電話號碼*");
			printf("*%-10s\t*%-10s\t*%-lld\n", q->name, q->work, q->number);
			puts("********************************");
			puts("輸入服務的物件的名字");//服務的物件
			scanf("%s", q->name1);
			fprintf(fp2, "%s %s %lld %s\n", q->name, q->work,q->number,q->name1);
      	    puts("服務成功");
			free(q);
			break;
		}
		else
		{
			p->next = q;
			p = q;

		}
		if (nRead != 3)
			printf("沒有這個號碼的服務人員");
	}
	p->next = NULL;
	fclose(fp1);
	system("pause");
	system("cls");
}

7,查詢服務物件

八,檔案管理

1,檔案管理選單

檔案包括:檔案儲存,檔案資料查詢,清空檔案資料

void FileMenu()
{
	system("cls");
	while (1) {
		system("cls");
		printf("*************************************************\n");
		printf("*\t歡迎使用檔案管理功能\t\t\t*\n");
		printf("*\t\t請選擇功能\t\t\t*\n");
		printf("*************************************************\n");
		printf("*\t\t1.檔案儲存\t\t\t*\n");
		printf("*\t\t2.檔案資料查詢\t\t\t*\n");
		printf("*\t\t3.檔案資料清空\t\t\t*\n");
		printf("*\t\t0.返回\t\t\t\t*\n");
		printf("*************************************************\n");
		char b = _getch();
		if (b == '0')
			break;
		switch (b)
		{
		case '1':
			Savefile();
			break;
		case '2':
			Filesercher();
			break;
		case '3':
			flash();
			break;
		default:
			printf("輸入有誤,沒有該功能\n\n");
			system("pause");
			system("cls");
			break;
		}
	}
	system("cls");
}

2,檔案資料儲存

可以儲存:會員,房屋,娛樂設施,使用者資料
ps:因為新建時是用的連結串列,所以必須要儲存
創新(取巧):這裡用了個switch,再用strcpy,給filename賦值,再進行操作

void Savefile() {
	system("cls");
	//開啟檔案
	while (1)
	{
		system("cls");
		FILE* pFile;
		printf("************************************************\n");
		printf("*\t\t請輸入您想儲存那個文字資料\t*\n");
		printf("*\t\t輸入1,儲存會員資料\t\t*\n*\t\t輸入2,儲存房屋資料\t\t*\n");
		printf("*\t\t輸入3,儲存娛樂設施資料\t\t*\n*\t\t輸入4,儲存使用者資料\t\t*\n");
		printf("*\t\t輸入0,返回\t\t\t*\n");
		printf("*************************************************\n");
		char  ch2 = _getch();
		if (ch2 == '0')
			break;
		struct Entity* p1 = NULL;
		char filename[30] = { "0" };
		switch (ch2)
		{
		case '1':
			strcpy(filename, ".\\會員資訊.txt");
			p1 = head2;
			break;
		case '2':
			strcpy(filename, ".\\房屋資訊.txt");
			p1 = head1;
			break;
		case '3':
			strcpy(filename, ".\\娛樂設施資訊.txt");
			p1 = head3;
			break;
		case '4':
			strcpy(filename, ".\\使用者資訊.txt");
			p1 = head4;
			break;
		case'\n':
			break;
		default:
			printf("輸入有誤,沒有該功能\n\n");
			system("pause");
			system("cls");
			break;
		}
		if (filename == ".\\使用者資訊.txt")
		{
			pFile = fopen(filename, "a+");
			//檔案地址要改
			fseek(pFile, 0, SEEK_END);
			if (pFile == NULL) {
				printf("開啟檔案失敗。\n");
				return;
			}

			else {//寫入資料
				struct Entity* p = p1;
				while (p != NULL)
				{
					fprintf(pFile, "%s  %s %lld\n", p->name,p->number,p->work);
					p = p->next;
				}

				//關閉檔案
				fclose(pFile);
				printf("%s資料儲存成功。\n", filename);
				system("pause");
				system("cls");
			}
		}
		else if (filename == ".\\會員資訊.txt")
		{
			pFile = fopen(filename, "a+");
			//檔案地址要改
			fseek(pFile, 0, SEEK_END);//末尾
			if (pFile == NULL) {
				printf("開啟檔案失敗。\n");
				return;
			}
			else {//寫入資料 

				struct Entity* p = p1;
				while (p != NULL)
				{
					fprintf(pFile, "%s  %lld  %s \n", p->name, p->number, p->work);
					p = p->next;

				}
				//關閉檔案
				fclose(pFile);
				printf("%s資料儲存成功。\n", filename);
				system("pause");
				system("cls");
			}
		}
		else if (filename == ".\\入住資訊.txt")
		{
			pFile = fopen(filename, "a+");
			//檔案地址要改
			fseek(pFile, 0, SEEK_END);//末尾
			if (pFile == NULL) {
				printf("開啟檔案失敗。\n");
				return;
			}
			else {//寫入資料 

				struct Entity* p = p1;
				while (p != NULL)
				{
					fprintf(pFile,"%s  %lld  %s %d\n", p->name, p->number, p->work, p->message);
					p = p->next;

				}

				//關閉檔案
				fclose(pFile);
				printf("%s資料儲存成功。\n", filename);
				system("pause");
				system("cls");
			}
		}

		else
		{
			pFile = fopen(filename, "a+");
			//檔案地址要改
			fseek(pFile, 0, SEEK_END);
			if (pFile == NULL) {
				printf("開啟檔案失敗。\n");
				return;
			}
			else {//寫入資料 
				struct Entity* p = p1;
				while (p != NULL)
				{
					fprintf(pFile, "%s  %lld  %s \n", p->name, p->number, p->work);
					p = p->next;

				}

				//關閉檔案
				fclose(pFile);
				printf("%s資料儲存成功。\n", filename);
				system("pause");
				system("cls");
			}
		}
	}
	system("cls");
}

3,檔案資料查詢

@1,檔案查詢選單

可以查詢(列印)會員,房屋,娛樂設施,使用者人員,服務物件資訊
既是查詢,有是列印

void Filesercher() {
	system("cls");

	while (1) {
		system("cls");
		puts("******************************");
		puts("*\t輸入1查詢會員資訊    *\t");
		puts("*\t輸入2查詢房屋資訊    *\t");
		puts("*\t輸入3查詢娛樂設施資訊*\t");
		puts("*\t輸入4查詢使用者人員資訊*\t");
		puts("*\t輸入5查詢入住資訊  *\t");
		puts("*\t輸入6查詢服務物件資訊*\t");
		puts("*\t輸入0退出            *\t");
		puts("******************************");

		char b = _getch();
		if (b == '0')
			break;
		switch (b)
		{
		case '1':
			Huiyuanfile();
			break;
		case '2':
			Fangwufile();
			break;
		case '3':
			Sheshifile();
			break;
		case '4':
			Userfile();
			break;
		case '5':
			Personfile();
			break;
		case '6':
			PersonUserfile();
			break;
		default:
			printf("輸入有誤,沒有該功能\n\n");
			system("pause");
			system("cls");
			break;
		}
	}
	system("cls");
}

@2,房屋檔案查詢

void Fangwufile()
{
	system("cls");
	FILE* fp;
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
	if ((fp = fopen(".\\房屋資訊.txt", "r")) == NULL)
	{
		printf("開啟房屋資訊.txt檔案失敗\n");
		return;
	}
	else
	{
		puts("**********************************");
		puts("*房屋型別\t\t*面積(m^2)");
		while (1)
		{

			int nRead = fscanf(fp, "%s %lld", q->name, &q->number);//nRead等於要輸出引數的個數
			if (2 == nRead)//判斷是否到了結尾
			{
				printf("*%-10s\t\t*%-lld*\n", q->name, q->number);
				p->next = q;
				p = q;
				puts("**********************************");
			}
			else
			{
				free(q);
				break;
			}
		}
	}
	p->next = NULL;
	fclose(fp);
	system("pause");

}

@3,會員檔案查詢

void Huiyuanfile()
{
	system("cls");
	FILE* fp;
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
	if ((fp = fopen(".\\會員資訊.txt", "r")) == NULL)
	{
		printf("開啟會員資訊.txt檔案失敗\n");
		return;
	}
	else
	{
		puts("**********************************");
		puts("*購買人\t\t*電話號碼\t*所購買的房型\t*");
		while (1)
		{

			int nRead = fscanf(fp, "%s %lld %s", q->name, &q->number, q->work);//nRead等於要輸出引數的個數
			if (3 == nRead)
			{
				printf("*%-10s\t*%-lld\t*%-10s\n", q->name, q->number, q->work);
				p->next = q;
				p = q;
			}
			else
			{
				free(q);
				break;
			}
		}
		puts("**********************************");
	}
	p->next = NULL;
	fclose(fp);
	system("pause");
	system("cls");
}

@4,設施檔案查詢

void Sheshifile()
{

	FILE* fp;
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
	if ((fp = fopen(".\\娛樂設施資訊.txt", "r")) == NULL)
	{
		printf("開啟娛樂設施資訊.txt檔案失敗\n");
		return;
	}
	else
	{
		puts("*娛樂設施的名稱\t*可以使用的人數");
		while (1)
		{

			int nRead = fscanf(fp, "%s %lld\n", q->name, &q->number);//nRead等於要輸出引數的個數
			if (2 == nRead)
			{
				printf("*%-10s\t*%-lld\t\n", q->name, q->number);
				p->next = q;
				p = q;
			}
			else
			{
				free(q);
				break;
			}
		}
	}
	p->next = NULL;
	fclose(fp);
	system("pause");
}

@5,使用者檔案查詢

void Userfile()
{
	system("cls");
	FILE* fp1;
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
	if ((fp1 = fopen(".\\使用者資訊.txt", "r")) == NULL)
	{
		printf("開啟使用者資訊.txt檔案失敗\n");
		return;
	}
	puts("********************************");
	puts("*姓名    \t*職務\t\t*電話號碼*");
	while (1)
	{

		int nRead = fscanf(fp1, "%s %lld %s", q->name, &q->number,q->work);//nRead等於要輸出引數的個數
		if (3 == nRead)
		{

			printf("*%-10s\t*%-10s\t*%-lld\n", q->name, q->work, q->number);
			p->next = q;
			p = q;
			puts("********************************");
		}
		else
		{
			free(q);
			break;
		}
	}
	p->next = NULL;
	fclose(fp1);
	system("pause");
}

@6,入住檔案查詢

void Personfile() {
	system("cls");
	FILE* fp;
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
	if ((fp = fopen(".\\入住資訊.txt", "r")) == NULL)
	{
		printf("開啟入住資訊.txt檔案失敗\n");
		return;
	}
	else
	{
		puts("******************************************************");
		printf("*購買人\t\t*電話號碼\t*所購買的房型\t");
		printf("*入住資訊\t\n");
		while (1)
		{
			struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
			int nRead = fscanf(fp, "%s %lld %s %d\n", q->name, &q->number, q->work, &q->message);//nRead等於要輸出引數的個數
			if (4 == nRead)
			{
				char b[20] = "\0";
				if (q->message == 1)
					strcpy(b, "入住");
				else if (q->message == 2)
					strcpy(b, "出租");
				else strcpy(b, "閒置");
				printf("*%-10s\t*%-lld\t*%-10s\t*%-10s\n", q->name, q->number, q->work, b);
				p->next = q;
				p = q;
			}
			else
			{
				free(q);
				break;
			}
		}
	}
	p->next = NULL;
	fclose(fp);
	system("pause");
	system("cls");
}

@7,服務物件檔案查詢

void PersonUserfile(){
	system("cls");
	FILE* fp1;
	struct Entity* p = (struct Entity*)malloc(sizeof(struct Entity));
	struct Entity* q = (struct Entity*)malloc(sizeof(struct Entity));
	if ((fp1 = fopen(".\\服務物件資訊.txt", "r")) == NULL)
	{
		printf("開啟服務物件資訊.txt檔案失敗\n");
		return;
	}
	puts("********************************");
	puts("*姓名    \t*職務\t\t*電話號碼\t*服務物件");
	while (1)
	{
		int nRead = fscanf(fp1, "%s %s %lld %s\n", q->name, q->work, &q->number,q->name1);//nRead等於要輸出引數的個數
		if (4 == nRead)
		{
			printf("*%-10s\t*%-10s\t*%-lld\t*%-10s\n", q->name, q->work, q->number,q->name1);
			p->next = q;
			p = q;
			puts("********************************");
		}
		else
		{
			break;
		}
	}
	p->next = NULL;
	free(q);
	fclose(fp1);
	system("pause");
	system("cls");
}

4,檔案資料清空

可以清空:會員,房屋,服務物件,娛樂設施,使用者,入住資訊
思想:switch,再用strcpy給filename賦值
重點:檔案開啟方式為w+,再直接關閉即可!!!

void flash() {
	system("cls");
	//開啟檔案
	FILE* pFile;
	puts("***********************************");
	printf("*請輸入您想儲存哪個清空資料\n");
	printf("*輸入1,清空會員資料\n*輸入2,清空房屋資料\n*輸入3,清空服務物件資訊\n");
	printf("*輸入4,清空娛樂設施資料\n*輸入5,清空使用者資料\n輸入6,清空入住資訊\n");
	puts("***********************************");
	char  ch2 = _getch();
	char filename[30] = { "0" };
	switch (ch2)
	{
	case '1':
		strcpy(filename, ".\\會員資訊.txt");
		break;
	case '2':
		strcpy(filename, ".\\房屋資訊.txt");
		break;
	case '3':
		strcpy(filename, ".\\服務物件資訊.txt");
		break;
	case '4':
		strcpy(filename, ".\\娛樂設施資訊.txt");
		break;
	case '5':
		strcpy(filename, ".\\使用者資訊.txt");
		break;
	case '6':
		strcpy(filename, ".\\入住資訊.txt");
		break;
	case'\n':
		break;
	default:
		printf("輸入有誤,沒有該功能\n\n");
		system("pause");
		system("cls");
		break;
	}
	FILE* fp = fopen(filename, "w+");
	if (fp == NULL)
	{
		printf("檔案未被開啟\n");
	}
	else
	{
		fclose(fp);
		printf("你已經清空%s\n", filename);
	}
	system("pause");
	system("cls");
}

相關文章