研究生信息管理系统(C语言课设)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<conio.h>
#include<time.h>
#include <windows.h>
#pragma comment(lib, "Winmm.lib")
#define len sizeof(struct ADJ)
typedef struct ADJ
{
long xuehao,jxueji;
char name[20],daoshi[20]
	,zhuanye[30],xianjiufx[50],sushe[10];
char sex[10];
struct ADJ *next;
}stu;
stu head;//将头节点定义为全局变量
void displayMenu();//显示菜单
int menuchoose();//获取用户菜单选择
stu *getupaddr(long xuehao); //返回指定学号的上一个节点指针
stu * creat();//创建一个节点
int add(stu *p1);//将节点加入链表
void displayall();//显示所有信息
int rencount();//统计总人数
void xiugai(stu *p);//修改信息
stu * xhaofind(long xh);//按学号进行查找,返回该学号上一个节点指针
int question(const char *pstr);//获取判断
void del(stu *p);//删除信息
void choose(int n);//功能选择
void delall();//删除所有研究生信息
int display(stu *p);//单个显示
void Load();//载入数据
void Save();//保存信息到文件
stu *namefind(char *mz);//按姓名查找,返回所查找姓名的上一个节点指针
void daos(char *dao);//按导师查找
void sefind(char *se);//按宿舍号查找
void xhaorank();//冒泡排序法
void namerank();//按姓名首字母排序
void daosrank();//按导师首字母排序
void zyrank();//按专业首字母排序
void yecount();//按专业统计人数
void dscount();//按导师统计奖学金
void yemoney();//按专业统计奖学金
void home();//欢迎界面
void login();//登陆验证
void music();//播放音乐
void offmusic();//关闭音乐
void tui();//退出音效
void hello();//问候音
void dqsj();//显示当前时间


int main()
{
	hello();
	home();
	login();
	choose(menuchoose());
return 0;
}




void choose(int n)//功能选择
{ 
int count=0,a;//a为选择变量
char mz[20],dao[20],se[10];
long b;
while(1)
	{
	switch(n)
	{
	case 1:Load();system("pause");choose(menuchoose());break;//载入信息
	case 2:displayall();rencount();//显示全部信息
		if(question("是否返回主菜单?")) choose(menuchoose());break;
	case 3:do//添加信息
		{
			add(creat());
		    count++;
		}while(question("是否继续输入?"));
		printf("一共添加了%d条信息!\n",count);
		if(question("是否返回主菜单?")) choose(menuchoose());break;
	case 4:printf("您的查找方式?\n1为学号查找,2为姓名查找,3为导师查找,4为宿舍号查找\n您的选择是:");//查找信息
		 fflush(stdin);//清空输入缓冲区
		scanf("%d",&a);
		while(a!=1&&a!=2&&a!=3&&a!=4)//防止输入错误
		{
			printf("您的输入有误,请重新输入:");
			scanf("%d",&a);
			 fflush(stdin);//清空输入缓冲区
		}
		if(a==1)//学号查找
		{
			printf("请输入您要查找的学号:");
			scanf("%ld",&b);
			if(display(xhaofind(b)))
				{
					printf("您想对该数据进行何种操作?\n");
					printf("1删除  2修改  3返回主菜单\n请做出您的选择:");
				}
			else
					{
						if(question("是否返回主菜单?")) choose(menuchoose());
						else choose(4);
					}
			 fflush(stdin);//清空输入缓冲区
			 scanf("%d",&a);
			 while(a!=1&&a!=2&&a!=3)//防止输入错误
			{
				printf("您的输入有误,请重新输入:");
				scanf("%d",&a);
				 fflush(stdin);//清空输入缓冲区
			}
			if(a==1)//删除该信息
			{
				del(xhaofind(b));
				if(question("是否返回主菜单?")) choose(menuchoose());
			}
			else if(a==2)//修改该信息
			{
				xiugai(xhaofind(b));
				if(question("是否返回主菜单?")) choose(menuchoose());
			}
			else//返回主菜单
				 choose(menuchoose());
			}
		else if(a==2)//姓名查找
		{
			printf("请输入您要查找的姓名:");
			scanf("%s",mz);
			if(display(namefind(mz)))//判断信息是否存在
				{
					printf("您想对该数据进行何种操作?\n");
					printf("1删除  2修改  3返回主菜单\n请做出您的选择:");
				}
			else
					{
						if(question("是否返回主菜单?")) choose(menuchoose());
						else choose(4);
					}
			 fflush(stdin);//清空输入缓冲区
			 scanf("%d",&a);
			 while(a!=1&&a!=2&&a!=3)//防止输入错误
			{
				printf("您的输入有误,请重新输入:");
				scanf("%d",&a);
				 fflush(stdin);//清空输入缓冲区
			}
			if(a==1)//删除
			{
				del(namefind(mz));
				if(question("是否返回主菜单?")) choose(menuchoose());
			}
			else if(a==2)//修改
			{
				xiugai(namefind(mz));
				if(question("是否返回主菜单?")) choose(menuchoose());
			}
			else//返回主菜单
				 choose(menuchoose());
			}
		else if(a==3)//按导师查找
			{
				printf("请输入您要查找的导师姓名:");
				scanf("%s",dao);
				daos(dao);if(question("是否返回主菜单?")) choose(menuchoose());
		    }
		else
		{
			printf("请输入您要查找的宿舍号:");
			scanf("%s",se);
			sefind(se);if(question("是否返回主菜单?")) choose(menuchoose());
		}
		break;
	case 5:printf("您的排序方式?\n1按学号排序,2按姓名排序,3按导师排序,4按专业排序\n您的选择是:");
		 fflush(stdin);//清空输入缓冲区
		scanf("%d",&a);
		while(a!=1&&a!=2&&a!=3&&a!=4)
		{
			printf("您的输入有误,请重新输入:");
			scanf("%d",&a);
			 fflush(stdin);//清空输入缓冲区
		}
		if(a==1)
			{
				xhaorank();choose(2);
			}
		else if(a==2)
			{
				namerank();choose(2);
			}
		else if(a==3)
			{
				daosrank();choose(2);
			}
		else
			zyrank();choose(2);
		break;
	case 6:printf("您的统计方式?\n1按专业统计人数,2按导师统计奖学金总金额,3按专业统计奖学金总金额\n您的选择是:");
		scanf("%d",&a);
		while(a!=1&&a!=2&&a!=3)//防止输入错误
		{
			printf("您的输入有误,请重新输入:");
			scanf("%d",&a);
			 fflush(stdin);//清空输入缓冲区
		}
		if(a==1)
		{
			yecount();if(question("是否返回主菜单?")) choose(menuchoose());
		}
		else if(a==2)
		{
			dscount();if(question("是否返回主菜单?")) choose(menuchoose());
		}
		else
			yemoney();if(question("是否返回主菜单?")) choose(menuchoose());
		break;
	case 7:delall();if(question("是否返回主菜单?")) choose(menuchoose());break;
	case 8:Save();if(question("是否返回主菜单?")) choose(menuchoose());break;
	case 9:if(question("您确定要退出吗?退出前请检查数据是否已保存?"))
		   {system("cls");home();
		printf("                                                感谢您使用研究生信息管理系统,再见!\n");
		printf("                                 Thank you for using the Graduate Information Management System. Good-bye.\n");
		tui();
		getch();exit(0);}choose(menuchoose());break;
	case 10:if(question("您确定要播放背景音乐吗?"))
					music();
				choose(menuchoose());
	case 11:if(question("您确定要关闭背景音乐吗?"))
				offmusic();
		choose(menuchoose());
	default:break;
	}
 }
}


void displayMenu()//显示菜单

{

	system("cls");

	printf("----------------------------研究生信息管理系统--------------------------------\n");

	printf("\n\t1.读取信息文件        2.显示所有信息        3.添加信息\n");

	printf("\t4.查找研究生          5.排序                6.统计\n");

	printf("\t7.删除所有信息        8.保存信息至文件      9.退出系统\n");

	printf("\t10.播放背景音乐       11.关闭背景音乐\n");


	printf("\n-------------------------------------------------------------------------------\n");
	dqsj();

}

int menuchoose()//获取用户菜单选择
{
	int menu;
	displayMenu();
	printf("请选择菜单,输入数字1-11:\n");
	scanf("%d",&menu);
	while(menu<1||menu>11)//判断输出是否正确
	{
		displayMenu();
		printf("选择错误!请重新输入:\n");
		fflush(stdin);//清空输入缓冲区
		scanf("%d",&menu);
	}
	return(menu);
}
stu * creat()//创建一个节点
{
	stu *p;
	 p=(stu *)malloc(len);
	if(!p)
	{
		printf("申请空间失败!!!\n");
		return NULL;
	}
	else
		printf("请输入学号:");

	while(1!=scanf("%ld",&p->xuehao)||getupaddr(p->xuehao))
	{
		printf("输入错误或该学号已存在,请重新输入:\n");
		fflush(stdin);
	}
	printf("请输入姓名:");
	scanf("%20s",p->name);
	printf("请输入性别:");
	scanf("%s",p->sex);
	printf("请输入导师的姓名:");
	scanf("%s",p->daoshi);
	printf("请输入专业名称:");
	scanf("%s",p->zhuanye);
	printf("请输入研究方向:");
	scanf("%s",p->xianjiufx);
	printf("请输入奖学金数额(整型):");
	scanf("%ld",&p->jxueji);
	printf("请输入宿舍信息:");
	scanf("%s",p->sushe);
	p->next=NULL;
	return(p);
}

stu *getupaddr(long xuehao) //返回指定学号的上一个节点指针
{
	stu *p=&head;
	while(p->next)
	{
		if(p->next->xuehao==xuehao)
			return(p);
		p=p->next;
	}
	return(NULL);
}

int add(stu *p1)//将节点加入链表
{
   stu *pt=&head;
   if(!p1)//判断是否为空节点
	   return 0;
	   if(getupaddr(p1->xuehao))//判断该研究生信息是否存在
	   {
		   printf("学号为%ld的研究生信息已存在!\n",p1->xuehao);
		   free(p1);//释放该节点的内存
		   return 0;
	   }
	   while(pt->next)//将指针移到最后一个节点
		   pt=pt->next;
	   pt->next=p1;
	   p1->next=NULL;
	   return 1;
}

void displayall()//显示所有信息
{
	stu *p2=&head;
	if(p2->next)
	{
		printf("-------------------------------------------------------------------------------------------------\n");
		printf("学号        姓名    性别 导师    专业                研究方向                奖学金  宿舍信息\n");
		printf("-------------------------------------------------------------------------------------------------\n");
		while(p2->next)
		{
			printf("%-12d",p2->next->xuehao);
			printf("%-8s",p2->next->name);
			printf("%-5s",p2->next->sex);
			printf("%-8s",p2->next->daoshi);
			printf("%-20s",p2->next->zhuanye);
			printf("%-24s",p2->next->xianjiufx);
			printf("%-8d",p2->next->jxueji);
			printf("%-10s\n",p2->next->sushe);
			p2=p2->next;
		}
		printf("-------------------------------------------------------------------------------------------------\n");
	}
	else
		printf("当前信息为空,请载入文件或输入信息!!!\n");
}

int rencount()//统计总人数
{
int count=0;
stu *p=&head;
while(p->next)
{
	count++;
	p=p->next;
}
printf("\n当前共有%d位研究生信息。\n",count);
return(count);
}

stu * xhaofind(long xh)//按学号进行查找,返回该学号上一个节点指针
{
stu *p=getupaddr(xh);//获取要查找学号的上一个节点
if(!p)
{
	printf("没有学号为%ld的研究生\n",xh);
	return(NULL);
}
else 
	return(p);
}

void xiugai(stu *p1)//修改信息
{
	stu *temp;
	if(question("您是否要重新输入该研究生信息?"))
	{
		temp=p1->next;
		p1->next=temp->next;
		free(temp);
		add(creat());
		printf("修改成功!\n");
	}
	else
		printf("修改失败!!\n");
}

int question(const char *pstr)//获取判断
{
	char answer;
	printf("%s请选择(y or n):", pstr);
	while(1 != scanf(" %c", &answer) || (answer != 'y' && answer != 'n'))
	{
		printf("输入错误!\n请重新选择(y or n):");
		fflush(stdin);//清空输入缓冲区
	}
	if('y' == answer)
		return 1;
	else
		return 0;	
}

void del(stu *p)//删除信息
{
	stu *temp;
if(!question("确定要删除该研究生信息吗?"))
	printf("删除失败!!");
else
{
	temp=p->next;
	p->next=temp->next;
	free(temp);
	printf("删除成功!");
}
}

void delall()//删除所有研究生信息
{
	stu *p=head.next,*temp;
	int count=0;
	if(!question("确定要删除当前所有研究生信息吗?"))
		printf("删除失败!!\n");
	else
	{
		while(p)
		{
			temp=p;
			p=p->next;
			free(temp);
			++count;
		}
		head.next=NULL;
		printf("共删除了%d位研究生信息!\n",count);
	}
}

int display(stu *p)//单个显示
{
	if(p)
	{
		printf("-------------------------------------------------------------------------------------------------\n");
		printf("学号        姓名    性别 导师    专业                研究方向                奖学金  宿舍信息\n");
		printf("-------------------------------------------------------------------------------------------------\n");
		printf("%-12d",p->next->xuehao);
		printf("%-8s",p->next->name);
		printf("%-5s",p->next->sex);
		printf("%-8s",p->next->daoshi);
		printf("%-20s",p->next->zhuanye);
		printf("%-24s",p->next->xianjiufx);
		printf("%-8d",p->next->jxueji);
		printf("%-10s\n",p->next->sushe);
		printf("-------------------------------------------------------------------------------------------------\n");
		return 1;
	}
	return 0;
}

stu *namefind(char *mz)//按姓名查找,返回所查找姓名的上一个节点指针
{
	stu *p=&head;
	while(p->next)
	{
		if(0==strcmp(p->next->name,mz))
			return(p);
		p=p->next;
	}
	printf("姓名为%s的研究生信息不存在!\n",mz);
	return NULL;
}


void daos(char *dao)//按导师查找
{
	stu *p2=&head;
	int i=0;
	if(p2->next)
	{
		printf("-------------------------------------------------------------------------------------------------\n");
		printf("学号        姓名    性别 导师    专业                研究方向                奖学金  宿舍信息\n");
		printf("-------------------------------------------------------------------------------------------------\n");
		while(p2->next)
		{
			if(strcmp(p2->next->daoshi,dao)==0)
			{
				printf("%-12d",p2->next->xuehao);
				printf("%-8s",p2->next->name);
				printf("%-5s",p2->next->sex);
				printf("%-8s",p2->next->daoshi);
				printf("%-20s",p2->next->zhuanye);
				printf("%-24s",p2->next->xianjiufx);
				printf("%-8d",p2->next->jxueji);
				printf("%-10s\n",p2->next->sushe);
				i++;
			}
			p2=p2->next;
		}
		if(!i)
			printf("没有该研究生信息\n");
		else 
			{
				printf("-------------------------------------------------------------------------------------------------\n");
				printf("专业为%s的研究生共有%d人\n",dao,i);
				printf("\n");
				printf("\n");
			}
	}
	else
		printf("当前信息为空,请载入文件或输入信息!!!\n");
}

void sefind(char *se)//按宿舍号查找
{
	stu *p2=&head;
	int i=0;
	if(p2->next)
	{
		printf("-------------------------------------------------------------------------------------------------\n");
		printf("学号        姓名    性别 导师    专业                研究方向                奖学金  宿舍信息\n");
		printf("-------------------------------------------------------------------------------------------------\n");
		while(p2->next)
		{
			if(strcmp(p2->next->sushe,se)==0)
			{
				printf("%-12d",p2->next->xuehao);
				printf("%-8s",p2->next->name);
				printf("%-5s",p2->next->sex);
				printf("%-8s",p2->next->daoshi);
				printf("%-20s",p2->next->zhuanye);
				printf("%-24s",p2->next->xianjiufx);
				printf("%-8d",p2->next->jxueji);
				printf("%-10s\n",p2->next->sushe);
				i++;
			}
			p2=p2->next;
		}
		if(!i)
			printf("没有该研究生信息\n");
		else 
			{
				printf("-------------------------------------------------------------------------------------------------\n");
				printf("宿舍号为%s的研究生共有%d人\n",se,i);
				printf("\n");
				printf("\n");
			}
	}
	else
		printf("当前信息为空,请载入文件或输入信息!!!\n");
}





void Load()//载入数据

{
	int i, count = 0, repeat = 0;
	FILE *pf;
	stu *pstu;
	printf("提示:从文件中读取研究生信息会询问是否清空当前研究生信息(不清空表示合并所有信息)。\n");
	if((pf = fopen("xsx.dat", "rb")) == NULL)
	{
		printf("当前信息为空,请载入文件或输入信息!!!\n");
		if(question("是否返回主菜单?")) choose(menuchoose());
		exit(0);
	}
	delall();//删除之前的所有学生信息,然后从文件中读取
	fread(&count, 1, sizeof count, pf);//获取学生信息的数量
	for(i = 0;i<count;i++)
	{
		pstu = (stu *)malloc(len);
		fread(pstu, 1, sizeof(stu), pf); 
		if(!add(pstu))
		{
			++repeat;//保持有多少个和当前链表中相重复的学生信息
		}
	}
	fclose(pf);
	printf("文件读取完毕!新增研究生信息%d条。\n", count - repeat);	

}

void Save()//保存信息到文件

{
	FILE *pf=fopen("xsx.dat","wb");
	stu *pstu = &head;
	int i = 0, count = rencount();
	if(!pf)
	{
		printf("打开待写入的文件失败!\n");
		system("pause");
		fclose(pf);
		exit(0);
	}
	if(question("您确定要保存吗?"))
	{
	fwrite(&count, 1, sizeof(count), pf);//把学生信息的数量先写入到文件头
	while(pstu->next)
	{
		fwrite(pstu->next, 1, sizeof(stu), pf);//把每位学生信息写入文件
		++i;
		pstu = pstu->next;
	}
	fclose(pf);
	if(i == count)
	{
		printf("成功的写入了%d条学生信息。\n", count);
	}
	else
	{
		printf("应写入%d条学生信息,实际写入%d条学生信息。\n", count, i);
	}	
	}
	else
		 choose(menuchoose());
}
void xhaorank()//学号冒泡排序法
{
	stu *cur,*tail;
	cur=head.next;
	tail=NULL; 
	if(cur==NULL||cur->next==NULL)
		return;
	while(cur!=tail)
	{
		while(cur->next!=tail)
		{
			if(cur->xuehao>cur->next->xuehao)
			{
				long temp=cur->xuehao,jxj;
				char n[20],s[10],ds[20],yfx[50],shue[10],zy[30];
				cur->xuehao=cur->next->xuehao;
				cur->next->xuehao=temp;                                          
				strcpy(n,cur->name);
				strcpy(cur->name,cur->next->name);
				strcpy(cur->next->name,n);
				strcpy(s,cur->sex);
				strcpy(cur->sex,cur->next->sex);
				strcpy(cur->next->sex,s);
				strcpy(ds,cur->daoshi);
				strcpy(cur->daoshi,cur->next->daoshi);
				strcpy(cur->next->daoshi,ds);
				strcpy(zy,cur->zhuanye);
				strcpy(cur->zhuanye,cur->next->zhuanye);
				strcpy(cur->next->zhuanye,zy);
				strcpy(yfx,cur->xianjiufx);
				strcpy(cur->xianjiufx,cur->next->xianjiufx);
				strcpy(cur->next->xianjiufx,yfx);
				jxj=cur->jxueji;
				cur->jxueji=cur->next->jxueji;
				cur->next->jxueji=jxj;
				strcpy(shue,cur->sushe);
				strcpy(cur->sushe,cur->next->sushe);
				strcpy(cur->next->sushe,shue);
			}
			cur=cur->next;
		}
		tail=cur;
		cur=head.next;
	}
}

void namerank()//按姓名首字母排序
{
	stu *cur,*tail;
	cur=head.next;
	tail=NULL; 
	if(cur==NULL||cur->next==NULL)
		return;
	while(cur!=tail)
	{
		while(cur->next!=tail)
		{
			if(strcmp(cur->name,cur->next->name)>0)
			{
				long temp=cur->xuehao,jxj;
				char n[20],s[10],ds[20],yfx[50],shue[10],zy[30];
				cur->xuehao=cur->next->xuehao;
				cur->next->xuehao=temp;                                          
				strcpy(n,cur->name);
				strcpy(cur->name,cur->next->name);
				strcpy(cur->next->name,n);
				strcpy(s,cur->sex);
				strcpy(cur->sex,cur->next->sex);
				strcpy(cur->next->sex,s);
				strcpy(ds,cur->daoshi);
				strcpy(cur->daoshi,cur->next->daoshi);
				strcpy(cur->next->daoshi,ds);
				strcpy(zy,cur->zhuanye);
				strcpy(cur->zhuanye,cur->next->zhuanye);
				strcpy(cur->next->zhuanye,zy);
				strcpy(yfx,cur->xianjiufx);
				strcpy(cur->xianjiufx,cur->next->xianjiufx);
				strcpy(cur->next->xianjiufx,yfx);
				jxj=cur->jxueji;
				cur->jxueji=cur->next->jxueji;
				cur->next->jxueji=jxj;
				strcpy(shue,cur->sushe);
				strcpy(cur->sushe,cur->next->sushe);
				strcpy(cur->next->sushe,shue);
			}
			cur=cur->next;
		}
		tail=cur;
		cur=head.next;
	}
}

void daosrank()//按导师首字母排序
{
	stu *cur,*tail;
	cur=head.next;
	tail=NULL; 
	if(cur==NULL||cur->next==NULL)
		return;
	while(cur!=tail)
	{
		while(cur->next!=tail)
		{
			if(strcmp(cur->daoshi,cur->next->daoshi)>0)
			{
				long temp=cur->xuehao,jxj;
				char n[20],s[10],ds[20],yfx[50],shue[10],zy[30];
				cur->xuehao=cur->next->xuehao;
				cur->next->xuehao=temp;                                          
				strcpy(n,cur->name);
				strcpy(cur->name,cur->next->name);
				strcpy(cur->next->name,n);
				strcpy(s,cur->sex);
				strcpy(cur->sex,cur->next->sex);
				strcpy(cur->next->sex,s);
				strcpy(ds,cur->daoshi);
				strcpy(cur->daoshi,cur->next->daoshi);
				strcpy(cur->next->daoshi,ds);
				strcpy(zy,cur->zhuanye);
				strcpy(cur->zhuanye,cur->next->zhuanye);
				strcpy(cur->next->zhuanye,zy);
				strcpy(yfx,cur->xianjiufx);
				strcpy(cur->xianjiufx,cur->next->xianjiufx);
				strcpy(cur->next->xianjiufx,yfx);
				jxj=cur->jxueji;
				cur->jxueji=cur->next->jxueji;
				cur->next->jxueji=jxj;
				strcpy(shue,cur->sushe);
				strcpy(cur->sushe,cur->next->sushe);
				strcpy(cur->next->sushe,shue);
			}
			cur=cur->next;
		}
		tail=cur;
		cur=head.next;
	}
}

void zyrank()//按专业排序
{
	stu *cur,*tail;
	cur=head.next;
	tail=NULL; 
	if(cur==NULL||cur->next==NULL)
		return;
	while(cur!=tail)
	{
		while(cur->next!=tail)
		{
			if(strcmp(cur->zhuanye,cur->next->zhuanye)>0)
			{
				long temp=cur->xuehao,jxj;
				char n[20],s[10],ds[20],yfx[50],shue[10],zy[30];
				cur->xuehao=cur->next->xuehao;
				cur->next->xuehao=temp;                                          
				strcpy(n,cur->name);
				strcpy(cur->name,cur->next->name);
				strcpy(cur->next->name,n);
				strcpy(s,cur->sex);
				strcpy(cur->sex,cur->next->sex);
				strcpy(cur->next->sex,s);
				strcpy(ds,cur->daoshi);
				strcpy(cur->daoshi,cur->next->daoshi);
				strcpy(cur->next->daoshi,ds);
				strcpy(zy,cur->zhuanye);
				strcpy(cur->zhuanye,cur->next->zhuanye);
				strcpy(cur->next->zhuanye,zy);
				strcpy(yfx,cur->xianjiufx);
				strcpy(cur->xianjiufx,cur->next->xianjiufx);
				strcpy(cur->next->xianjiufx,yfx);
				jxj=cur->jxueji;
				cur->jxueji=cur->next->jxueji;
				cur->next->jxueji=jxj;
				strcpy(shue,cur->sushe);
				strcpy(cur->sushe,cur->next->sushe);
				strcpy(cur->next->sushe,shue);
			}
			cur=cur->next;
		}
		tail=cur;
		cur=head.next;
	}
}


//欢迎界面******************************
float f(float x, float y, float z) {
    float a;
a = x * x + 9.0f / 4.0f * y * y + z * z - 1;
    return a * a * a - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z;
}
float h(float x, float z) {
float y;
    for ( y = 1.0f; y >= 0.0f; y -= 0.001f)
        if (f(x, y, z) <= 0.0f)
            return y;
	return 0.0f;}

void home()//欢迎界面
{
	float z,x,v,y0,ny,nx,nz,nd,d;
	 for ( z = 1.5f; z > -1.5f; z -= 0.05f) {
        for ( x = -1.5f; x < 1.5f; x += 0.025f) {
             v = f(x, 0.0f, z);
            if (v <= 0.0f) {
                 y0 = h(x, z);
                 ny = 0.01f;
                 nx = h(x + ny, z) - y0;
                 nz = h(x, z + ny) - y0;
                 nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);
                 d = (nx + ny - nz) * nd * 0.5f + 0.5f;
                putchar(".:-=+*#%@"[(int)(d * 5.0f)]);
            }
            else
                putchar(' ');
        }
        putchar('\n');
    }
}
//********************************************

void login()//登陆验证
{
	    int i=3,j=0;
		char password1[20]="201821111134", user[20],password[20];
		char user1[20]={"徐世兴"},ch;
		char password2[20]="201821111138",user2[20]={"李金轩"};
		printf("                                                    欢迎使用研究生信息管理系统\n");
	    printf("                                        Welcome to Postgraduate Information Management System\n");
	    printf("                                                        请输入您的用户名:");
		scanf("%s",user);
		while(!(strcmp(user1,user)==0||strcmp(user2,user)==0))
		{
			printf("                                                        该用户名不存在,请重新输入! 您还有%d次机会。\n",i);
			printf("                                                        请您重新输入:");
			scanf("%s",user);
			i--;
			if(!i)
				 {
					 system("cls");home();
				     printf("                                                感谢您使用研究生信息管理系统,再见!\n");
			         printf("                                 Thank you for using the Graduate Information Management System. Good-bye.\n");
				     getch();exit(0);
			}
		}
		printf("                                                        请输入您的密码:");
		ch=getch();
		while(ch!='\r'||ch=='\b')
		{
			if(ch!='\b')
			{
			password[j]=ch;
			printf("*");j++;
			}
			else
			{
				j-=1;
				printf("\b");
				printf(" ");
				printf("\b");
			}
			ch=getch();
		}
		i=3;
		while(!(strcmp(password1,password)==0||strcmp(password2,password)==0))
		{
			printf("\n                                              密码错误,请重新输入! 您还有%d次机会。\n",i);
			printf("                                                        请您重新输入:");
			ch=getch();
			j=0;
		while(ch!='\r'||ch=='\b')
		{
			if(ch!='\b')
			{
			password[j]=ch;
			printf("*");j++;
			}
			else
			{
				j-=1;
				printf("\b");
				printf(" ");
				printf("\b");
			}
			ch=getch();
		}
			i--;
			if(!i)
				 {
					 system("cls");home();
				     printf("                                                感谢您使用研究生信息管理系统,再见!\n");
			         printf("                                 Thank you for using the Graduate Information Management System. Good-bye.\n");
				     getch();exit(0);
			     }
		}
}


void yecount()//按专业统计人数
{
	stu *p2=&head;
	int i=0;
	zyrank();
	if(p2->next)
	{
		printf("-------------------------------------------------------------------------------------------------\n");
		printf("学号        姓名    性别 导师    专业                研究方向                奖学金  宿舍信息\n");
		printf("-------------------------------------------------------------------------------------------------\n");
		while(p2->next)
		{
			i++;
			printf("%-12d",p2->next->xuehao);
			printf("%-8s",p2->next->name);
			printf("%-5s",p2->next->sex);
			printf("%-8s",p2->next->daoshi);
			printf("%-20s",p2->next->zhuanye);
			printf("%-24s",p2->next->xianjiufx);
			printf("%-8d",p2->next->jxueji);
			printf("%-10s\n",p2->next->sushe);
			if(!p2->next->next)
			{
				printf("-------------------------------------------------------------------------------------------------\n");
				printf("专业为%s的研究生人数为%d\n",p2->next->zhuanye,i);
				break;
			}
			if(strcmp(p2->next->zhuanye,p2->next->next->zhuanye)!=0)
			{
				printf("-------------------------------------------------------------------------------------------------\n");
				printf("专业为%s的研究生人数为%d\n",p2->next->zhuanye,i);
				printf("\n");
				printf("\n");
				printf("-------------------------------------------------------------------------------------------------\n");
		printf("学号        姓名    性别 导师    专业                研究方向                奖学金  宿舍信息\n");
		printf("-------------------------------------------------------------------------------------------------\n");
				i=0;
			}
			p2=p2->next;
		}
		printf("\n");
		printf("\n");
		printf("-------------------------------------------------------------------------------------------------\n");
	}
	else
		printf("当前信息为空,请载入文件或输入信息!!!\n");
}

void dscount()//按导师统计奖学金
{
	stu *p2=&head;
	int i=0;
	daosrank();
	if(p2->next)
	{
		printf("-------------------------------------------------------------------------------------------------\n");
		printf("学号        姓名    性别 导师    专业                研究方向                奖学金  宿舍信息\n");
		printf("-------------------------------------------------------------------------------------------------\n");
		while(p2->next)
		{
			printf("%-12d",p2->next->xuehao);
			printf("%-8s",p2->next->name);
			printf("%-5s",p2->next->sex);
			printf("%-8s",p2->next->daoshi);
			printf("%-20s",p2->next->zhuanye);
			printf("%-24s",p2->next->xianjiufx);
			printf("%-8d",p2->next->jxueji);
			printf("%-10s\n",p2->next->sushe);
			i+=p2->next->jxueji;
			if(!p2->next->next)
			{
				printf("-------------------------------------------------------------------------------------------------\n");
				printf("导师为%s的研究生奖学金总数为%d元\n",p2->next->daoshi,i);
				break;
			}
			if(strcmp(p2->next->daoshi,p2->next->next->daoshi)!=0)
			{
				printf("-------------------------------------------------------------------------------------------------\n");
				printf("导师为%s的研究生奖学金总数为%d元\n\n",p2->next->daoshi,i);
				printf("\n");
				printf("\n");
				printf("-------------------------------------------------------------------------------------------------\n");
		printf("学号        姓名    性别 导师    专业                研究方向                奖学金  宿舍信息\n");
		printf("-------------------------------------------------------------------------------------------------\n");
				i=0;
			}
			p2=p2->next;
		}
		printf("\n");
		printf("\n");
		printf("-------------------------------------------------------------------------------------------------\n");
	}
	else
		printf("当前信息为空,请载入文件或输入信息!!!\n");
}

void yemoney()//按专业统计奖学金
{
	stu *p2=&head;
	int i=0;
	zyrank();
	if(p2->next)
	{
		printf("-------------------------------------------------------------------------------------------------\n");
		printf("学号        姓名    性别 导师    专业                研究方向                奖学金  宿舍信息\n");
		printf("-------------------------------------------------------------------------------------------------\n");
		while(p2->next)
		{
			printf("%-12d",p2->next->xuehao);
			printf("%-8s",p2->next->name);
			printf("%-5s",p2->next->sex);
			printf("%-8s",p2->next->daoshi);
			printf("%-20s",p2->next->zhuanye);
			printf("%-24s",p2->next->xianjiufx);
			printf("%-8d",p2->next->jxueji);
			printf("%-10s\n",p2->next->sushe);
			i+=p2->next->jxueji;
			if(!p2->next->next)
			{
				printf("-------------------------------------------------------------------------------------------------\n");
				printf("专业为%s的研究生奖学金总数为%d元\n",p2->next->zhuanye,i);
				break;
			}
			if(strcmp(p2->next->zhuanye,p2->next->next->zhuanye)!=0)
			{
				printf("-------------------------------------------------------------------------------------------------\n");
				printf("专业为%s的研究生奖学金总数为%d元\n",p2->next->zhuanye,i);
				printf("\n");
				printf("\n");
				printf("-------------------------------------------------------------------------------------------------\n");
		printf("学号        姓名    性别 导师    专业                研究方向                奖学金  宿舍信息\n");
		printf("-------------------------------------------------------------------------------------------------\n");
				i=0;
			}
			p2=p2->next;
		}
		printf("\n");
		printf("\n");
		printf("-------------------------------------------------------------------------------------------------\n");
	}
	else
		printf("当前信息为空,请载入文件或输入信息!!!\n");
}

void music()//播放音乐
{
PlaySound(TEXT("music.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
}

void offmusic()//关闭音乐
{
PlaySound(NULL, NULL, SND_FILENAME | SND_ASYNC);
}

void hello()//问候音
{
PlaySound(TEXT("hello.wav"), NULL, SND_FILENAME | SND_ASYNC);
}

void tui()//退出音效
{
 PlaySound(TEXT("退出音效.wav"), NULL, SND_FILENAME | SND_SYNC);
}


void dqsj()//显示当前时间
{
	char * wday[] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
	time_t t;
	struct tm *p;
	t = time(NULL);
	p = gmtime(&t);
	printf("现在时间是:"); 
	printf("%d年%2d月%2d日", (1900+p->tm_year), (1+p->tm_mon), p->tm_mday);
	printf(" %s ", wday[p->tm_wday]);
	printf("%02d:%02d\n", (8+p->tm_hour), p->tm_min);	
	printf("\n-------------------------------------------------------------------------------\n");
}
发布了33 篇原创文章 · 获赞 27 · 访问量 74

猜你喜欢

转载自blog.csdn.net/weixin_46165788/article/details/105532206