主頁 > 軟體設計 > C語言開發東北大學20級大作業—活力長者社區(附原始碼)

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

2020-12-15 11:56:26 軟體設計

東北大學20級大作業—活力長者社區

  • ==活力長者社區==
    • ==一,系統使用展示(部分)==
    • ==二,系統功能介紹==
      • 1,系統功能介紹
      • 2,系統main函式,while回圈在外,系統程式能夠持續運行,switch判斷陳述句進行功能選擇與函式切換,
      • 3,全域共用結構體
      • 4,頭檔案
    • ==前言==
    • ==二,選單==
      • 1,選單展示
      • 2,列印選單
    • ==三,會員管理==
      • 1,會員管理選單
      • 2,新建會員
      • 3,查詢會員
      • 4,修改會員
      • 5,洗掉會員
    • ==四,房屋管理==
      • 1,房屋選單
      • 1,新建房屋
      • 2,修改房屋資訊
      • 3,洗掉房屋資訊
      • 4,查詢房屋資訊
    • == 五,入住管理==
      • 1,入住管理選單
      • 2,會員入住管理
      • 3,入住資訊查詢
    • ==六,娛樂設施管理==
      • 1,娛樂設施管理選單
      • 2,新建娛樂設施
      • 3,搜尋娛樂設施資訊
      • 4,修改娛樂設施資訊
      • 5,洗掉設施資訊
    • ==七,用戶管理==
      • 1,用戶管理選單
      • 2,新建用戶
      • 3,查詢用戶
      • 4,修改用戶
      • 5, 洗掉用戶資料
      • 6,設定服務物件
      • 7,查詢服務物件
    • ==八,檔案管理==
      • 1,檔案管理選單
      • 2,檔案資料保存
      • 3,檔案資料查詢
        • @1,檔案查詢選單
        • @2,房屋檔案查詢
        • @3,會員檔案查詢
        • @4,設施檔案查詢
        • @5,用戶檔案查詢
        • @6,入住檔案查詢
        • @7,服務物件檔案查詢
      • 4,檔案資料清空

活力長者社區

東北大學20級大作業—活力長者社區
開發語言:C語言
開發者:20級軟體2009楊富超等
使用工具:vs2019
CSDN原始碼下載:東北大學20級大作業—活力長者社區
任何疑問歡迎留言
請尊重勞動成果,借用時評論一下“已借用”

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

在這里插入圖片描述

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");
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/234944.html

標籤:其他

上一篇:Java圖片上傳功能

下一篇:C語言實作單鏈表的增刪查改

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more