C语言课设——宿舍管理

和本编前几个程序结构差不多,比较简单直观,希望可以给你带来帮助。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<Windows.h>
typedef struct student
{
	int might1;
	int might2;
	char user[20];//账号
	char mima[20];//密码
	char name[20];//姓名    
	char sex[5];//性别    
	char num[20];//学号	  
	char classs[20];//班级	
	char floor[20];//楼号   
	char dorm[20];//宿舍号	
	struct student *next;
}LinkList;
void menu3(struct student *p,char us[20]);
void menu1(struct student *p);
void menu2(struct student *p);
void menu33(struct student *p);
void menu22(struct student *p);
void savestudentFile(struct student *L);
void Look(struct student *p)
{
	struct student *q=p->next;
	char us[20];
	int flag = 0,i;
	system("cls");
	printf("\t请输入你要打印的学生的账号:\n");
	scanf("%s",us);
	while (q!= NULL)
	{
		if(strcmp(q->user,us)==0)
		{
			printf("账号:%s,密码:%s,姓名:%s,楼号:%s,宿舍号:%s\n",q->user,q->mima,q->name,q->floor,q->dorm);
			flag=1;
		}
		q = q->next;
	}
	if (flag == 0)
	{
		printf("\t无该学生信息\n");
	}
	printf("按回车返回菜单!\n");
	getchar();
	getchar();
	menu2(p);
}
void ADD(struct student *p)
{
	struct student *q, *n = p;
	struct student *h = p->next;
	int flag = 0;
	system("cls");
	q = (struct student *)malloc(sizeof(struct student));
	q->next = NULL;
	q->might1=0;
	q->might2=2;
	printf("请输入选择添加的学生:\n");
	printf("账号 :");
	scanf("%s",q->user);
	printf("密码 :");
	scanf("%s",q->mima);
	printf("姓名 :");
	scanf("%s", q->name);
	printf("性别 :");
	scanf("%s",q->sex);
	printf("班级 :");
	scanf("%s",q->classs);
	printf("学号 :");
	scanf("%s",q->num);
	printf("楼号 :");
	scanf("%s",q->floor);
	printf("宿舍号 :");
	scanf("%s",q->dorm);
	getchar(); 
	while (h != NULL)
	{
		if (strcmp(h->user,q->user)==0)
		{
			flag = 1;
			printf("\t该学号已存在\n");
			Sleep(1000);
			ADD(p);
			break;
		}
		h = h->next;
	}
	while (n->next != NULL)
	{
		n = n->next;
	}
	n->next=q;
	if (flag == 0)
	{
		printf("\t添加成功\n");
		printf("\t按任意键返回菜单\n");
	}
	else
		printf("\t添加失败\n");
	printf("按回车返回菜单!\n");
	getchar();
	menu2(p);
}
void Dele(struct student *p)
{
	struct student *q = p->next;
	struct student *n = p;
	char us[20];
	int flag = 0;
	system("cls");
	printf("\t请输入你要删除的学生学号\n");
	scanf("%s", us);
	while (q != NULL)
	{
		if (strcmp(q->user,us)==0)
		{
			flag = 1;
			n->next = q->next;
			break;
		}
		n = q;
		q = q->next;
	}
	if (flag != 1)
	{
		printf("\t无该学生信息\n");
	}
	else
	{
		printf("\t删除成功\n");
	}
	printf("按回车返回菜单!\n");
	getchar();
	getchar();
	menu2(p);
}
void Quan(struct student *p)
{
	int i,m,j;
	char us[20],mi[20],na[20],se[5],nu[20],cla[20],flo[20],dar[20];
	struct student *q=p->next->next;
	printf("请输入要修改的学生账户:");
	scanf("%s",us);
	while(q!=NULL)
	{
		if(strcmp(q->user,us)==0)
		{
			printf("请选择将要修改的内容:\n");
			printf("1.姓名\n");
			printf("2.性别\n");
			printf("3.学号\n");
			printf("4.班级\n");
			printf("5.楼号\n");
			printf("6.宿舍号\n");
			printf("7.账号\n");
			printf("8.密码\n");
			printf("9.冻结账户\n");
			printf("10.解冻账号\n");
			printf("11.返回上一层\n");
			scanf("%d",&i);
			switch(i)
			{
			case 1:printf("新修改的姓名\n");scanf("%s",na);j=1;strcpy(q->name,na);break;
			case 2:printf("新修改的性别\n");scanf("%s",se);j=1;strcpy(q->sex,se);break;
			case 3:printf("新修改的学号\n");scanf("%s",nu);j=1;strcpy(q->num,nu);break;
			case 4:printf("新修改的班级\n");scanf("%s",cla);j=1;strcpy(q->classs,cla);break;
			case 5:printf("新修改的楼号\n");scanf("%s",flo);j=1;strcpy(q->floor,flo);break;
			case 6:printf("新修改的宿舍号\n");scanf("%s",dar);j=1;strcpy(q->dorm,dar);break;
			case 7:printf("新修改的账号\n");scanf("%s",us);j=1;strcpy(q->user,us);break;
			case 8:printf("新修改的密码\n");scanf("%s",mi);j=1;strcpy(q->mima,mi);break;
			case 9:j=1;q->might2=3;break;
			case 10:j=1;q->might2=2;break;
			case 11:menu2(p);break;
			default:printf("请输入合法量!\n");break;
			}
		}
		q=q->next;
	}
	if(j==1)
	{
		printf("修改成功!\n");
	}
	if(j==0)
	{
		printf("修改失败!\n");
	}
	printf("按回车返回菜单!\n");
	getchar();
	getchar();
	menu2(p);
}
void Browse(struct student *p,char us[20])
{
	struct student *q = p->next;
	int flag = 0;
	system("cls");
	{
		while (q != NULL)
		{
			if (strcmp(q->user,us)==0)
			{
				flag = 1;
				printf("\t该学生信息  姓名:%s   学号:%d   性别:%s   班级:%s   楼号:%s   寝室号:%s\n", q->name, q->num, q->sex, q->classs, q->floor,q->dorm);
			}
			q = q->next;
		}
		if (flag == 0)
		{
			printf("\t你无此权限\n");
		}
		printf("按回车返回菜单!\n");
		getchar();
		getchar();
		menu3(p,us);
	}
}
void modify(struct student *p,char us[20])
{
	struct student *q=p->next;
	char mi[20],na[20],se[5],nu[20],cla[20],flo[20],dar[20];
	int j,i;
	system("cls");
	printf("\n\n\n**********修改学生住宿信息**********\n");
	while(q!=NULL)
	{
		if(strcmp(q->user,us)==0)
		{
			printf("请选择将要修改的内容:\n");
			printf("1.姓名\n");
			printf("2.性别\n");
			printf("3.学号\n");
			printf("4.班级\n");
			printf("5.楼号\n");
			printf("6.宿舍号\n");
			printf("7.账号\n");
			printf("8.密码\n");
			printf("9.返回上一层\n");
			scanf("%d",&i);
			switch(i)
			{
			case 1:printf("新修改的姓名\n");scanf("%s",na);j=1;strcpy(q->name,na);break;
			case 2:printf("新修改的性别\n");scanf("%s",se);j=1;strcpy(q->sex,se);break;
			case 3:printf("新修改的学号\n");scanf("%s",nu);j=1;strcpy(q->num,nu);break;
			case 4:printf("新修改的班级\n");scanf("%s",cla);j=1;strcpy(q->classs,cla);break;
			case 5:printf("新修改的楼号\n");scanf("%s",flo);j=1;strcpy(q->floor,flo);break;
			case 6:printf("新修改的宿舍号\n");scanf("%s",dar);j=1;strcpy(q->dorm,dar);break;
			case 7:printf("新修改的账号\n");scanf("%s",us);j=1;strcpy(q->user,us);break;
			case 8:printf("新修改的密码\n");scanf("%s",mi);j=1;strcpy(q->mima,mi);break;
			case 9:menu2(p);break;
			default:printf("请输入合法量!\n");break;
			}
		}
		q=q->next;
	}
	if(j==1)
	{
		printf("修改成功!\n");
	}
	if(j==0)
	{
		printf("修改失败!\n");
	}
	printf("按回车返回菜单!\n");
	getchar();
	getchar();
	menu3(p,us);
}
void inquire(struct student *p,char us[20])
{
	struct student *q = p->next;
	char nu[20];
	char name[20];
	char flo[20];
	char dor[20];
	int k;
	int flag=0;
	system("cls");
	printf("\n\n\t\t\t1.按学号查询\n");
	printf("\t\t\t2.按姓名查询\n");
	printf("\t\t\t3.按楼号统计\n");
	printf("\t\t\t4.按楼号+寝室号查询\n");
	printf("\t\t\t0.结束查询返回上一层\n");
	printf("请选择:");
	scanf("%d",&k);
	switch(k)
	{
	case 1:
		printf("\n\n\n**********按学号查询**********\n");
		printf("\n 请输入要查询的学号:");
		scanf("%s",nu);
		while (q != NULL)
		{
			if (strcmp(q->num,nu)==0)
			{
				flag=1;
				printf("\t该学生信息\n姓名:%s \n学号:%d \n性别:%s \n班级:%s \n楼号:%s \n寝室号:%s\n",  q->name, q->num, q->sex, q->classs, q->floor, q->dorm);
			}
			q = q->next;
		}
			break;
	case 2:
		printf("\n\n\n**********按姓名查询**********\n");
		printf("\n 请输入要查询的姓名:");
		scanf("%s",name);		
		while (q!=NULL)
		{
			if (strcmp(name,q->name)==0)
			{
				flag=1;
				printf("\t该学生信息\n姓名:%s \n学号:%d \n性别:%s \n班级:%s \n楼号:%s \n寝室号:%s\n",  q->name, q->num, q->sex, q->classs, q->floor, q->dorm);
			}
			q = q->next;
		}
			break;
	case 3:
		printf("\n\n\n**********按楼号查询**********\n");
		printf("\n 请输入要查询的楼号:");
		scanf("%s",flo);
		getchar();
		while (q != NULL)
		{
			if (strcmp(flo,q->floor)==0)
			{
				flag=1;
				printf("\t该学生信息\n姓名:%s \n学号:%d \n性别:%s \n班级:%s \n楼号:%s \n寝室号:%s\n",  q->name, q->num, q->sex, q->classs, q->floor, q->dorm);
			}
			q = q->next;
		}
			break;
	case 4:
		printf("\n\n\n**********按楼号+寝室号查询**********\n");
		printf("\n 请输入要查询的楼号+寝室号:");
		scanf("%s %s",flo,dor);
		while (q != NULL)
		{
			if ((strcmp(flo,q->floor)==0)&&(strcmp(dor,q->dorm)==0))
			{
				flag=1;
				printf("\t该学生信息\n姓名:%s \n学号:%d \n性别:%s \n班级:%s \n楼号:%s \n寝室号:%s\n",  q->name, q->num, q->sex, q->classs, q->floor, q->dorm);
			}
			q = q->next;
		}
			break;
	case 0:menu3(p,us);break;
	}
	if(flag==0)
	{
		printf("无此信息!");
		Sleep(1500);
		menu3(p,us);
	}
	if(flag==1)
	{
		printf("查询成功!\n");
		printf("按回车返回菜单!\n");
		getchar();
		menu3(p,us);
	}
}
void statistics(struct student *p,char us[20])
{

	struct student *q = p->next;
	char cla[20];
	char name[20];
	char flo[20];
	char dor[20];
	int flag=0,k;
	system("cls");
	printf("\n\n\t\t\t1.按班级统计\n");
	printf("\t\t\t2.按楼号统计\n");
	printf("\t\t\t3.按楼号+寝室号统计\n");
	printf("\t\t\t0.结束查询返回上一层\n");
	printf("请选择:");
	scanf("%d",&k);
	switch(k)
	{
	case 1:
		printf("\n\n\n**********按班级查询**********\n");
		printf("\n 请输入要查询的班级:");
		scanf("%s",cla);
		while (q != NULL)
		{
			if (strcmp(q->classs,cla)==0)
			{
				flag=1;
				printf("\t该学生信息\n姓名:%s \n学号:%d \n性别:%s \n班级:%s \n楼号:%s \n寝室号:%s\n",  q->name, q->num, q->sex, q->classs, q->floor, q->dorm);
			}
			q = q->next;
		}
			break;
	case 2:
		printf("\n\n\n**********按楼号查询**********\n");
		printf("\n 请输入要查询的楼号:");
		scanf("%s",flo);

		while (q != NULL)
		{
			if (strcmp(flo,q->floor)==0)
			{
				flag=1;
				printf("\t该学生信息\n姓名:%s \n学号:%d \n性别:%s \n班级:%s \n楼号:%s \n寝室号:%s\n",  q->name, q->num, q->sex, q->classs, q->floor, q->dorm);
			}
			q = q->next;
		}
			break;
	case 3:
		printf("\n\n\n**********按楼号+寝室号查询**********\n");
		printf("\n 请输入要查询的楼号+寝室号:");
		scanf("%s%s",flo,dor);
		while (q != NULL)
		{
			if ((strcmp(flo,q->floor)==0)&&(strcmp(dor,q->dorm)==0))
			{
				flag=1;
				printf("\t该学生信息\n姓名:%s \n学号:%d \n性别:%s \n班级:%s \n楼号:%s \n寝室号:%s\n",  q->name, q->num, q->sex, q->classs, q->floor, q->dorm);
			}
			q = q->next;
		}
			break;
	case 0:menu3(p,us);break;
	}
	if(flag==0)
	{
		printf("无此信息!\n");
		Sleep(1500);
		menu3(p,us);
	}
	if(flag==1)
	{
		printf("查询成功!");
		printf("按回车返回菜单!\n");
		getchar();
		menu3(p,us);
	}
}
void amend(LinkList *p)
{
	struct student *q=p->next;
	char acc[20],poss[20],ac[20];
	int flag=0,i;
	system("cls");
	printf("请输入要修改的账号:");
	scanf("%s",acc);
	while(q!=NULL)
	{
		if(strcmp(q->user,acc)==0)
		{
			flag=1;
			printf("1.仅修改密码\n2.密码账户均修改\n");
			scanf("%d",&i);
			if(i==1)
			{
				printf("请输入新密码:");
				scanf("%s",poss);
				strcpy(q->mima,poss);break;
			}
			if(i==2)
			{
				printf("请输入新账号:");
				scanf("%s",ac);
				getchar();
				printf("请输入新密码:");
				scanf("%s",poss);
				strcpy(q->user,ac);
				strcpy(q->mima,poss);break;
			}
		}
		q=q->next;
	}
	if(flag==0)
	{
		printf("账户错误!\n");
		printf("\t请按回车键返回菜单\n");
	}
	if(flag==1)
	{
		printf("修改成功!\n");
		printf("\t请按回车键返回菜单\n");
	}
	getchar();
	getchar();
	menu2(p);
}
void menu33(struct student *p)
{
	int i=0;
	struct student *h=p->next->next;
	struct student *t;
	char a[20],b[20];
	system("cls");
	printf("请输入账户:");
	scanf("%s",a);
	getchar();
	printf("请输入密码:");
	scanf("%s",b);
	getchar();
	while(h!=NULL)
	{
		if((strcmp(h->user,a)==0)&&(strcmp(h->mima,b)==0))
		{
			t=h;
			if(h->might2==2)
			{
				i=1;
				menu3(p,a);break;
				
			}
		}
		h=h->next;
	}
	if(t->might2==3)
	{
		printf("该账号已被冻结");
		Sleep(2000);
		menu1(p);
	}
	if(i==0)
	{
		printf("密码或账号错误!\n");
		Sleep(2000);
		menu1(p);
	}
}
void menu3(struct student *p,char us[20])
{
	int i;
	system("cls");
	while(1)
	{
		printf("		*****************************************\n");
		printf("		*****                               *****\n");
		printf("		*****     欢迎使用宿舍管理系统      *****\n");
		printf("		****         1.个人信息浏览          ****\n");
		printf("		****         2.个人信息修改          ****\n");
		printf("		****         3.宿舍信息查询          ****\n");
		printf("		****         4.宿舍信息统计          ****\n");
		printf("		****         5.返回上一层            ****\n");
		printf("		****         6.退出                  ****\n");
		printf("		*****************************************\n");
		scanf("%d",&i);
		switch(i)
		{
		case 1:Browse(p,us);break;//个人信息浏览
		case 2:modify(p,us);break;//个人信息修改
		case 3:inquire(p,us);break;//宿舍信息查询
		case 4: statistics(p,us);break;//宿舍信息统计 
		case 5:menu1(p);break;
		case 6:savestudentFile(p);exit(0);
		default:printf("\t输入不合法量\n");
		}
	}
}
void menu22(struct student *p)
{
	struct student *h=p->next;
	char a[20],b[20];
	int i=0;
	system("cls");
	printf("请输入账户:");
	scanf("%s",a);
	getchar();
	printf("请输入密码:");
	scanf("%s",b);
	getchar();
	while(h!=NULL)
	{
		if((strcmp(h->user,a)==0)&&(strcmp(h->mima,b)==0))
		{
			i=1;
			menu2(p);break;
		}
		h=h->next;
	}
	if(i==0)
	{
		printf("密码或账号错误!\n");
		Sleep(2000);
		menu1(p);
	}
}
void menu2(struct student *p)
{
	int c;
	system("cls");
	while(1)
	{
		printf("		****************************************\n");
		printf("		*****                              *****\n");
		printf("		*****     欢迎使用宿舍管理系统     *****\n");
		printf("		****         1.用户资料打印         ****\n");
		printf("		****         2.添加用户             ****\n");
		printf("		****         3.删除用户             ****\n");
		printf("		****         4.修改用户信息(权限 )****\n");
		printf("		****         5.返回上一层           ****\n");
		printf("		****         6.修改密码             ****\n");
		printf("		****         7.退出                 ****\n");
		printf("		****************************************\n"); 
		scanf("%d",&c);
		switch(c)
		{
		case 1:Look(p);break;//用户资料打印
		case 2:ADD(p);break;//添加用户
		case 3:Dele(p);break;//删除用户
		case 4:Quan(p);break;//修改用户权限 
		case 5:menu1(p);break;
		case 6:amend(p);break;
		case 7:savestudentFile(p);exit(0);
		default:printf("请输入合法量!\n");
		}
	}
}
void menu1(struct student *p)
{
	int a;
	system("cls");
	while(1)
	{
		printf("		*****************************************\n");
		printf("		*****                               *****\n");
		printf("		*****     欢迎使用宿舍管理系统      *****\n");
		printf("		*****                               *****\n");
		printf("		*****          1.管理员登陆         *****\n");
		printf("		*****                               *****\n");
		printf("		*****          2.用户登陆           *****\n");
		printf("		*****                               *****\n");
		printf("		*****                               *****\n");
		printf("		*****************************************\n");
		scanf("%d",&a);
		switch(a)
		{
		case 1:menu22(p);break;
		case 2:menu33(p);break;
		case 3:exit(0);break;
		default:printf("请输入合法量!\n");
		}
	}
}
void savestudentFile(struct student *L)
{
	FILE *fp;
	struct student *p;
	p=L->next;
	fp=fopen("dorm.txt","w");
	if(fp==NULL)
	{
		printf("无法打开此文件\n");
		exit(0);
	}
	while(p)
	{
		fprintf(fp,"%d %d %s %s %s %s %s %s %s %s \n",p->might1,p->might2,p->user,p->mima,p->name,p->sex,p->num,p->classs,p->floor,p->dorm);
		p=p->next;
	}
	fclose(fp);
}
void ListInsert(struct student *L,struct student *n)
{
	struct student *q=L;
	n->next=NULL;
	while(q->next!=NULL)
	{
		q=q->next;
	}
	q->next=n;
}
void readstudentput(struct student *L)
{
	FILE *fp;
	struct student *n;
	struct student *m;
	char us[20],mi[20],na[20],se[5],nu[20],cla[20],flo[20],dar[20],a[20],b[20];
	int mi1,mi2;
	fp=fopen("dorm.txt","r");
	if(fp==NULL)
	{
		fp=fopen("dorm.txt","w");
		exit(0);
	}
	else
	{
		if(fgetc(fp)==-1)
		{
			printf("此账号初次使用:\n请输入初始账号:");
			scanf("%s",a);
			getchar();
			printf("请输入初始密码:");
			scanf("%s", b); 
			getchar();
			m=(struct student *)malloc(sizeof(LinkList));
			strcpy(m->user,a);//初始账户
			strcpy(m->mima,b);//初始密码
			strcpy(m->name ,"0");
			strcpy(m->sex ,"0");
			strcpy(m->num ,"0");
			strcpy(m->classs ,"0");
			strcpy(m->floor ,"0");
			strcpy(m->dorm,"0");
			m->might1=1;
			m->might2=0;
			m->next=NULL;
			L->next=m;
		}
		if(fgetc(fp)!=-1)
		{
			fseek(fp,-2L,1);
		}
		while(!feof(fp))
		{
			fscanf(fp,"%d %d %s %s %s %s %s %s %s %s ",&mi1,&mi2,us,mi,na,se,nu,cla,flo,dar);
			n=(struct student *)malloc(sizeof(struct student));
			strcpy(n->user,us);
			strcpy(n->mima,mi);
			strcpy(n->name ,na);
			strcpy(n->sex ,se);
			strcpy(n->num ,nu);
			strcpy(n->classs ,cla);
			strcpy(n->floor ,flo);
			strcpy(n->dorm,dar);
			n->might1=mi1;
			n->might2=mi2;
			ListInsert(L,n);
		}
	}
	fclose(fp);
}
int main()
{
	struct student *p;
	p = (struct student *)malloc(sizeof(struct student));
	p->next = NULL;
	readstudentput(p);
	menu1(p);
	system("pause");
	return 0;
}

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值