C语言开发东北大学20级大作业—活力长者社区(附源码)

1 篇文章 0 订阅
1 篇文章 0 订阅

12.20更新密码功能,被迫营业

活力长者社区

东北大学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");
	int k = PassWord();
	if (k == 2)
	{
		system("cls");
		return;
	}

	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,查询服务对象

打印服务对象

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

八,文件管理

1,文件管理菜单

文件包括:文件保存,文件数据查询,清空文件数据

void FileMenu()
{
	system("cls");
	int k = PassWord();
	if (k == 2)
	{
		system("cls");
		return;
	}
	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");
}

九,密码功能

注意添加 #define PASSWORD 6666
作用于:用户和文件操作时
注意在yangfuchao.h中添加int PassWord

int k = PassWord();
	if (k == 2)
	{
		system("cls");
		return;
	}

上面这个是添加在各个功能菜单开头且在system(“cls”);后

int PassWord() {

	int password;
	int  a=0;

	do {
		system("cls");
		puts("***************************");
		printf("请输入密码\n");
		scanf_s("%d", &password);
		if (PASSWORD == password) {
           break;
		}
		else {
			printf("密码输入有误,请重新输入\n");
			printf("是(1)否(2)重新输入\n");
		}
		scanf("%d", &a);
		if (a == 2)
			return 2;
	} while (a == 1);
	puts("欢迎您!!!");
	puts("*******************************");
	system("pause");
	return 1;
}
  • 91
    点赞
  • 246
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 48
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 48
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超超不写代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值