程序设计之学生宿舍管理系统

前情:现在不是学妹啦,是我女朋友啦,找我简单修改一下程序设计相关的代码,到最后基本重新编写代码,然后简单分享一下,如果小伙伴们喜欢,请给作者点个赞,谢谢啦。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<windows.h>
#include <malloc.h> 
#define Max 100
char a[Max][20];
int length;
void showmenu();
void processmenu();
void create();
void display();
void disbed();
void modify();
void del();
void save();
void testFile(FILE* fp2);
char* Int_Change_char(int num);

typedef struct{
	int dormno;
	int bedno;
	int isstay;
}bedinfo;
struct dorminfo{
	bedinfo bed;
	char stuno[20];
	char name[20];
	char stucla[20];
	int year;
	int month;
	struct dorminfo *next;
};
struct dorminfo *head=NULL, *p1, *p2, *p3, *p4;

void showmenu(){
	printf("\n\n\n\t\t 欢迎进入学生宿舍管理系统\n");
	printf("\t\t*********************************\n");
	printf("\t\t1.输入床位信息\n");
	printf("\t\t2.根据学号,显示学生住宿信息\n");
	printf("\t\t3.根据宿舍号,显示住宿信息\n");
	printf("\t\t4.根据宿舍号、床位号,修改住宿信息\n");
	printf("\t\t5.根据宿舍号、床位号,删除住宿信息\n");
	printf("\t\t6.退出 \n");
	printf("\t\t********************************\n") ;
}
void processmenu(){
	int caidan;
	printf("请输入您的选项<1~7>:");
	scanf("%d",&caidan);
	if(caidan>=7||caidan<=0)
	{
		printf("对不起,您输入的选项有误,请重新输入!\n");
		printf("请输入您的选项<1~7>:");
		scanf("%d",&caidan);
	}
	switch(caidan)
	{
		case 1:create();break;
		case 2:display();break;
		case 3:disbed();break;
		case 4:modify();break;
		case 5:del();break;
		case 6:exit(0);
	}
}
void create(){
	int j;
	char ch;
	length = 0;
	p1=(struct dorminfo *)malloc(sizeof(struct dorminfo));
	if(head==NULL) head=p1;
	printf("开始输入床位信息....\n");
	Sleep(500);
	do
	{
		p2=(struct dorminfo *)malloc(sizeof(struct dorminfo));
		printf("请输入宿舍号:");
		scanf("%d",&p2->bed.dormno);
		printf("请输入床号:");
		scanf("%d",&p2->bed.bedno);
		printf("是否有人居住(1/0):");
		scanf("%d",&p2->bed.isstay);
		getchar();
		printf("请输入学生学号:");
		scanf("%s",p2->stuno);
		strcpy(a[length++], p2->stuno);
		if(length > 0)
		{
			for(j = 1 ; j < length;j++)
			{
				if(a[length - 1]==a[j])
				{
					printf("该学号已存在,请重新输入:");
					scanf("%s",p2->stuno);
				}
			}
		}
		getchar();
		printf("请输入学生姓名:");
		scanf("%s",p2->name);
		getchar();
		printf("请输入学生班级:");
		scanf("%s",p2->stucla);
		printf("请输入学生入住时间(年 月)<如2015 5>:");
		scanf("%d%d",&p2->year,&p2->month);
		if(p2->year<1000||p2->year>9999||p2->month>12||p2->month<1)
		{
			printf("对不起,输入错误,请重新输入!\n");
			scanf("%d%d\n",&p2->year,&p2->month);
		}
		p1->next=p2;
		p2->next=NULL;
		p1=p1->next;
		printf("第%d个住宿信息创建成功!\n", length);
		Sleep(1000);
		system("cls");
		fflush(stdin);
		printf("是否继续添加住宿信息?<y/Y>");
		ch=getchar();
		if(ch != 'y' && ch != 'Y'){
			printf("正在保存在文件中,请稍等");
			save();
		}
	} while(ch=='y'||ch=='Y');
}
void display(){
	//从文件中读取存储的文件数据
	FILE* fp2;
	int flag=0;
	char str[200], No[100];
	testFile(fp2);
	int END;
	fp2 = fopen("学生宿舍管理系统.txt", "r+");
	printf("请输入学号:");
	scanf("%s",No);
	while(fscanf(fp2, "%s", str) != EOF){
		char* ch = strstr(str, No);
		if(ch) {
			printf("%s\n", str);
			while(fscanf(fp2, "%s", str) != EOF){
				if(strstr(str, "月")) {
					printf("%s\n", str);
					break;
				}
				else printf("%s\n", str);
				flag = 1;
			}
			goto end;
		}
	}
	end:if(!flag) printf("没有找到该学生住宿信息!\n");
	fclose(fp2);
}
void disbed(){
	//从文件中读取存储的文件数据
	FILE* fp2;
	int flag=0;
	int bedno;
	char str[200], No[100], temp[100];
	testFile(fp2);
	fp2 = fopen("学生宿舍管理系统.txt", "r+");
	printf("请输入宿舍号:");
	scanf("%d",&bedno);
	int count = 0;
	while(bedno){
		int t = bedno % 10;
		bedno /= 10;
		temp[count++] = t + '0';
	}
	temp[count] = '\0';
	int i = 0;
	while(count--){
		No[i++] = temp[count]; 
	}
	No[i] = '\0';
	while(fscanf(fp2, "%s", str) != EOF){
		char Stuno[100];
		char* ch = strstr(str, No);
		if(ch) {
			printf("%s\n%s\n", Stuno, str);
			while(fscanf(fp2, "%s", str) != EOF){
				if(strstr(str, "月")) {
					printf("%s\n", str);
					break;
				}
				else printf("%s\n", str);
				flag = 1;
			}
			goto end;
		}
		else strcpy(Stuno, str);
	}
	end:if(!flag) printf("没有找到该学生住宿信息!\n");
	fclose(fp2);
}
void modify(){
	//del()源码改编而来
	FILE* fp2, *fp1;
	fp1 = fopen("temp.txt", "w");
	fp2 = fopen("学生宿舍管理系统.txt", "r+");
	testFile(fp2);
	int DormNo,BedNo, flag = 1, j = 0;
	char dormno[20] = "宿舍号:", bedno[20] = "床号:", *temp;
	char str[20];
	printf("请输入宿舍号、床位号:");
	scanf("%d %d",&DormNo,&BedNo);
	temp = Int_Change_char(DormNo);
	strncat(dormno, temp, strlen(temp));
	temp = Int_Change_char(BedNo);
	strncat(bedno, temp, strlen(temp));
	char Stuno[20], Dormno[20], Bedno[20], time[20], isstay[20], stucla[30], name[30];
	while(fscanf(fp2, "%s", str) != EOF){
		printf("1:%s\n", str);
		if(strstr(str, "学号")) strcpy(Stuno, str);
		if(strstr(str, "宿舍号")) strcpy(Dormno, str);
		if(strstr(str, "床号")) strcpy(Bedno, str);
		if(strstr(str, "有无人居住")) strcpy(isstay, str);
		if(strstr(str, "姓名")) strcpy(name, str);
		if(strstr(str, "班级")) strcpy(stucla, str);
		if(strstr(str, "入住时间")) strcpy(time, str);
		int i = 0;
		if(strstr(str, dormno)){
			while(fscanf(fp2, "%s", str) != EOF){
				if(strstr(str, "床号")) strcpy(Bedno, str);
				if(strstr(str, bedno)) {
					while(fscanf(fp2, "%s", str) != EOF){
						printf("3:%s\n", str);
						if(strstr(str, "月")) goto end;
					}
				}
				else break;
			}
		}
		else if(strstr(str, "月")){
			flag = 0;
			fprintf(fp1, "%s %s %s %s %s %s %s\n", Stuno, Dormno, Bedno, isstay, name, stucla, time);
		}
		end:printf("");
	}
	if(flag) printf("找不到要修改的宿舍号、床位号!\n");
	else{
		printf("请修改新的内容");
		create();
	}
	fclose(fp2);
	fclose(fp1);
	char oldname[] = "D:/codeblock-c++file/test/学生宿舍管理系统.txt";
	char newname[] = "D:/codeblock-c++file/test/temp.txt";
	if(remove(oldname) == 0) printf("ok");
	if(rename(newname, oldname) == 0) printf("修改成功");
}
void del(){
	FILE* fp2, *fp1;
	fp1 = fopen("temp.txt", "w");
	fp2 = fopen("学生宿舍管理系统.txt", "r+");
	testFile(fp2);
	int DormNo,BedNo, flag = 1, j = 0;
	char dormno[20] = "宿舍号:", bedno[20] = "床号:", *temp;
	char str[20];
	printf("请输入宿舍号、床位号:");
	scanf("%d %d",&DormNo,&BedNo);
	temp = Int_Change_char(DormNo);
	strncat(dormno, temp, strlen(temp));
	temp = Int_Change_char(BedNo);
	strncat(bedno, temp, strlen(temp));
	char Stuno[20], Dormno[20], Bedno[20], time[20], isstay[20], stucla[30], name[30];
	while(fscanf(fp2, "%s", str) != EOF){
		printf("1:%s\n", str);
		if(strstr(str, "学号")) strcpy(Stuno, str);
		if(strstr(str, "宿舍号")) strcpy(Dormno, str);
		if(strstr(str, "床号")) strcpy(Bedno, str);
		if(strstr(str, "有无人居住")) strcpy(isstay, str);
		if(strstr(str, "姓名")) strcpy(name, str);
		if(strstr(str, "班级")) strcpy(stucla, str);
		if(strstr(str, "入住时间")) strcpy(time, str);
		int i = 0;
		if(strstr(str, dormno)){
			while(fscanf(fp2, "%s", str) != EOF){
				if(strstr(str, "床号")) strcpy(Bedno, str);
				if(strstr(str, bedno)) {
					while(fscanf(fp2, "%s", str) != EOF){
						printf("3:%s\n", str);
						if(strstr(str, "月")) goto end;
					}
				}
				else break;
			}
		}
		else if(strstr(str, "月")){
			flag = 0;
			fprintf(fp1, "%s %s %s %s %s %s %s\n", Stuno, Dormno, Bedno, isstay, name, stucla, time);
		}
		end:printf("");
	}
	if(flag) printf("找不到要删除的宿舍号、床位号!\n");
	fclose(fp2);
	fclose(fp1);
	char oldname[] = "D:/codeblock-c++file/test/学生宿舍管理系统.txt";
	char newname[] = "D:/codeblock-c++file/test/temp.txt";
	if(remove(oldname) == 0) printf("ok");
	if(rename(newname, oldname) == 0) printf("修改成功");
}
void save(){
	FILE *fp1;
	if((fp1 = fopen("学生宿舍管理系统.txt", "r+")) == NULL){
		printf("文件不存在,无法存储数据,正在创建新的文件\n");
		Sleep(500);
		if((fp1 = fopen("学生宿舍管理系统.txt", "w")) != NULL) printf("文件创建成功\n");
		system("cls");
		fclose(fp1);
	}
	fp1 = fopen("学生宿舍管理系统.txt", "a");
	p1=head->next;
	printf("正在保存数据...\n");
	Sleep(300);
	system("cls");
	while(p1!=NULL)
	{
		fprintf(fp1,"学号:%s 宿舍号:%d 床号:%d 有无人居住:%d 姓名:%s 班级:%s 入住时间:%d年%d月\n",p1->stuno,p1->bed.dormno,p1->bed.bedno,p1->bed.isstay,p1->name,p1->stucla,p1->year,p1->month);
		p1=p1->next;
		if(p1 == NULL)printf("数据保存成功!\n");
	}
	fclose(fp1);
	printf("按任意键返回...\n");
	getch();
	system("cls");
	return ;
}
void testFile(FILE* fp2){
	if((fp2 = fopen("学生宿舍管理系统.txt", "r+")) == NULL){
		printf("文件不存在,无法存储数据,正在创建新的文件\n");
		Sleep(3000);
		if((fp2 = fopen("学生宿舍管理系统.txt", "w")) != NULL) printf("文件创建成功\n");
		Sleep(1000);
		system("cls");
		fclose(fp2);
		return;
	}
}
char* Int_Change_char(int num){
	int count = 0;
	char* str, *temp;
	str = (char*)malloc(20 * sizeof(char));
	temp = (char*)malloc(20 * sizeof(char));
	while(num){
		int t = num % 10;
		num /= 10;
		temp[count++] = t + '0';
	}
	temp[count] = '\0';
	int i = 0;
	while(count--){
		str[i++] = temp[count]; 
	}
	str[i] = '\0';
	return str;
}
int main(){
	while(1)
	{
		showmenu();
		processmenu();
		system("pause");
		system("cls");
	}
}

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值