C语言版本的师生管理系统

共7个文件
list.c 用到的链表实现
main.c 主函数入口,controller
main1.c 链表的常规算法
stu.h 头文件
use.c service层
welcome.c view层
student.txt 数据源
teach.txt 数据源

#include"stu.h"
//welcome.c
extern c;
extern a,b;
int d;
void welcome()
{
	system("clear");
	printf("*********************************************************************************************\n");
	printf("FileName:FiveRow.c\n");
	printf("Purpose:Increase efficiency manager student information\n");
	printf("Author:HanShuai\n");
	printf("Data:2016:01:26\n");
//	sleep(5);
	/*int i=7;
	while(i--)
	{
	system("clear");
	sleep(1);
	printf("hello\n");
	time_t now=time(NULL);
	printf("%d",now);
	printf("%d : %d : %d \n",now/3600%24+8,now/60%60,now%60);
	
	}*/
	system("clear");
	printf("*********************************欢迎使用师生信息管理系统***************************************\n");
	printf("#####**************************************************************************************#####\n");
	printf("please input user id\n");
	scanf("%d",&a);
	printf("please input user passwd\n");
	scanf("%d",&b);


}
void superuser()
{
	system("clear");
	printf("-----------------------------欢迎进入管理员界面---------------------\n");
	printf("-------------------------A 添加用户信息-------------------------------\n");
	printf("-------------------------D 删除用户信息-------------------------------\n");
	printf("-------------------------P 查看用户信息-------------------------------\n");
	printf("--------q返回主菜单------------Q退出系统------------------------------\n");
	printf("*********请选择功能**************************************[A&D&P]\n");
}
void teachuser()
{
	system("clear");
	printf("Teacher login\n");
	printf("----------------------------欢迎使用师生管理系统---------------------\n");
	printf("-------------------------A 添加教师信息-------------------------------\n");
	printf("-------------------------M 修改教师信息-------------------------------\n");
	printf("-------------------------D 删除教师信息-------------------------------\n");
	printf("-------------------------S 添加学生成绩-------------------------------\n");
	printf("-------------------------E 删除学生成绩-------------------------------\n");
	printf("-------------------------F 查询学生成绩-------------------------------\n");
	printf("-------------------------L 查询学生信息-------------------------------\n");
	printf("--------q返回主菜单------------Q退出系统------------------------------\n");
	printf("*********请输入功能选项**************************************[A&M&D&S&E&F&L]\n");

}
void studentuser()
{
	system("clear");
	printf("Student login\n");
	printf("----------------------------欢迎使用师生管理系统---------------------\n");
	printf("-------------------------A 注册学生信息-------------------------------\n");
	printf("-------------------------S 查询学生信息-------------------------------\n");
	printf("-------------------------M 修改学生信息-------------------------------\n");
	printf("-------------------------G 查询学生成绩-------------------------------\n");
	printf("-------------------------T 查询教师信息-------------------------------\n");
	printf("--------q返回主菜单------------Q退出系统------------------------------\n");
	printf("*********请输入功能选项**************************************[A&S&M&G&T]\n");

}
int welcomemain(int a,int b)
{
	Use *pHead = initListu();
	Stu *pHead1 = initList();
	Tea *pHead2 = initListT();
	 d=usetest(pHead,a,b);
	if(a==1&&b==111111)
	{
		printf("your are superuser\n");
		superuser();
		getchar();
		scanf("%c",&c);
		getchar();
		if(c=='A')
		{
			printf("请输入你要添加用户的类别,学生用户请按1,老师用户请按2\n");
			scanf("%d",&a);
			if(a==1)
				stuadduse(pHead);
			if(a==2)
				teaadduse(pHead);
			  
		}
		else if(c=='D')
		{
			printf("请输入你要删除的用户名****\n");

			usedel(pHead);
		}
		else if(c=='P')
		{
			useinformation(pHead);
		}
		else if(c=='q')
		{
			main();
		}
		else if(c=='Q')
		{
			exit(0);
		}
		else
		{
			printf("your input error,please again\n");
		}
		



	}
	if(d==1)
	{
		printf("you are student\n");
		studentuser();
		getchar();
		scanf("%c",&c);
		getchar();
		if(c=='A')
		{
			addstudent(pHead1);
		}
		else if(c=='S')
		{
			findstudent(pHead1);
		}
		else if(c=='M')
		{
			changestudent(pHead1);	
		}
		else if(c=='G')
		{
			findscore(pHead1);
		}
		else if(c=='T')
		{
			findteach(pHead2);
		}
		else if(c=='q')
		{
			main();
		}
		else if(c=='Q')
		{
			exit(0);
		}
		else
		{
			printf("your input error,please again\n");
		}
	}
	if(d==2)
	{
		printf("you are teach\n");
		teachuser();
		getchar();
		scanf("%c",&c);
		getchar();
		if(c=='A')
		{
			addteach(pHead2); 
		}
		else if(c=='M')
		{
			changeteach(pHead2);
		}
		else if(c=='D')
		{
			delteach(pHead2);
		}
		else if(c=='S')
		{

			addstudent(pHead1);
		}
		else if(c=='E')
		{
			delstudent(pHead1);
		}
		else if(c=='F')
		{
			findscore(pHead1);
		}
		else if(c=='L')
		{
			findstudent(pHead1);
		}
		else if(c=='q')
		{
			main();
		}
		else if(c=='Q')
		{
			exit(0);
		}
		else
		{
			printf("your input error,please again\n");
		}
	}
		
		return 0;
}`

#include "stu.h"
//list.c
void show(Stu *pHead)
{
	printf("--------------------------\n");
	Stu *pTmp = pHead->next;
	while(pTmp)
	{
		printf("%s %d %c %d\n",pTmp->name,pTmp->id,pTmp->gender,pTmp->score);
		pTmp = pTmp->next;
	}
}
void showt(Tea *pHead1)
{
	printf("--------------------------\n");
	Tea *pTmp = pHead1->next;
	while(pTmp)
	{
		printf("%s %d %s %d\n",pTmp->name,pTmp->age,pTmp->subject,pTmp->rank);
		pTmp = pTmp->next;
	}
}
void showu(Use *pHead2)
{
	printf("--------------------------\n");
	Use *pTmp = pHead2->next;
	while(pTmp)
	{
		printf("%d %d %c\n",pTmp->id,pTmp->passwd,pTmp->status);
		pTmp = pTmp->next;
	}
}

Stu *initList()
{
	Stu *pHead = malloc(sizeof(Stu));
	if(NULL == pHead)
	{
		printf("create phead failed\n");
		return NULL;
	}
	pHead->next = NULL;
}
Tea *initListT()
{
	Tea *pHead = malloc(sizeof(Tea));
	if(NULL == pHead)
	{
		printf("create phead1 failed\n");
		return NULL;
	}
	pHead->next = NULL;
}
Use *initListu()
{
	Use *pHead = malloc(sizeof(Use));
	if(NULL == pHead)
	{
		printf("create phead2 failed\n");
		return NULL;
	}
	pHead->next = NULL;
}
int clear(Stu *pHead)
{
	Stu *pTmp = pHead->next;
	Stu *pPrev = pTmp;
	while(pTmp)
	{
		pPrev = pTmp;
		pHead->next = pTmp->next;
		pTmp = pTmp->next;
		free(pPrev);
		pPrev = NULL;
	}
	
	return 0;
}
int cleart(Tea *pHead)
{
	Tea *pTmp = pHead->next;
	Tea *pPrev = pTmp;
	while(pTmp)
	{
		pPrev = pTmp;
		pHead->next = pTmp->next;
		pTmp = pTmp->next;
		free(pPrev);
		pPrev = NULL;
	}
	
	return 0;
}
int clearu(Use *pHead)
{
	Use *pTmp = pHead->next;
	Use *pPrev = pTmp;
	while(pTmp)
	{
		pPrev = pTmp;
		pHead->next = pTmp->next;
		pTmp = pTmp->next;
		free(pPrev);
		pPrev = NULL;
	}
	
	return 0;
}

int destroy(Stu *pHead)
{
	clear(pHead);
	free(pHead);
	pHead = NULL;

	return 0;
}
int destroyt(Tea *pHead1)
{
	cleart(pHead1);
	free(pHead1);
	pHead1 = NULL;

	return 0;
}
int destroyu(Use *pHead2)
{
	clearu(pHead2);
	free(pHead2);
	pHead2 = NULL;

	return 0;
}

//创建新结点
static Stu *createNewNode(Stu data)
{
	Stu *newNode = malloc(sizeof(Stu));
	if(NULL == newNode)
	{
		printf("malloc failed\n");
		return NULL;
	}

	memcpy(newNode,&data,sizeof(data));
	newNode->next = NULL;

	return newNode;
}
static Tea *createNewNodet(Tea data)
{
	Tea *newNode = malloc(sizeof(Tea));
	if(NULL == newNode)
	{
		printf("malloc failed\n");
		return NULL;
	}

	memcpy(newNode,&data,sizeof(data));
	newNode->next = NULL;

	return newNode;
}
static Use *createNewNodeu(Use data)
{
	Use *newNode = malloc(sizeof(Use));
	if(NULL == newNode)
	{
		printf("malloc failed\n");
		return NULL;
	}

	memcpy(newNode,&data,sizeof(data));
	newNode->next = NULL;

	return newNode;
}



int pushBack(Stu *pHead,Stu data)
{
	
	//在尾结点处进行插入
	Stu *pTmp;
	Stu *pData = createNewNode(data);
	
	if(pHead->next == NULL)
	{
		pHead->next = pData;
		pData->next = NULL;
		return 0;
	}
	
	pTmp = pHead->next;

	while(pTmp->next)
		pTmp = pTmp->next;
	pTmp->next = pData;
	pData->next = NULL;

	return 0;
}
int pushBackt(Tea *pHead,Tea data)
{
	
	//在尾结点处进行插入
	Tea *pTmp;
	Tea *pData = createNewNodet(data);
	
	if(pHead->next == NULL)
	{
		pHead->next = pData;
		pData->next = NULL;
		return 0;
	}
	
	pTmp = pHead->next;

	while(pTmp->next)
		pTmp = pTmp->next;
	pTmp->next = pData;
	pData->next = NULL;

	return 0;
}
int pushBacku(Use *pHead,Use data)
{
	
	//在尾结点处进行插入
	Use *pTmp;
	Use *pData = createNewNodeu(data);
	
	if(pHead->next == NULL)
	{
		pHead->next = pData;
		pData->next = NULL;
		return 0;
	}
	
	pTmp = pHead->next;

	while(pTmp->next)
		pTmp = pTmp->next;
	pTmp->next = pData;
	pData->next = NULL;

	return 0;
}

int getSize(Stu *pHead)
{
	int size = 0;
	Stu *pTmp = pHead->next;
	while(pTmp)
	{
		size++;
		pTmp = pTmp->next;
	}
	return size;
}

int insert(Stu *pHead,Stu data,int pos)
{
	Stu *pTmp = pHead->next;
	Stu *pData = createNewNode(data);
	if(pos <=0 || pos > getSize(pHead)+1)
	{
		printf("pos valid\n");
		return -1;
	}


	if(pos == 1)
	{
		pushFront(pHead,data);
		return 0;
	}
	if(pos == getSize(pHead)+1)
	{
		pushBack(pHead,data);
		return 0;
	}
	pos = pos-1;
	
	while(--pos)
	{
		pTmp = pTmp->next;

	}
	pData->next = pTmp->next;
	pTmp->next = pData;
	
	return 0;
}

int pushFront(Stu *pHead,Stu data)
{
	Stu *pData = createNewNode(data);
	if(pHead->next == NULL)
	{
		pHead->next = pData;
		pData->next = NULL;
		return 0;
	}
	Stu *pNode = pHead->next;
	pHead->next = pData;
	pData->next = pNode;

	
	return 0;
}

//从尾部删除结点
int popBack(Stu *pHead)
{
	//只有一个头指针
	if(pHead->next == NULL)
		return 0;
	Stu *pTmp = pHead->next;
	Stu *pPrev = pTmp;
	//只有一个头结点
	if(pTmp->next == NULL)
	{
		free(pTmp);
		pTmp = NULL;
		pHead->next = NULL;
		return 0;
	}
	//查找链表的尾结点,进行空间释放
	while(pTmp->next)
	{
		pPrev = pTmp;
		pTmp = pTmp->next;
	}
	
	free(pTmp);
	pTmp = NULL;
	pPrev->next = NULL;
	return 0;
}

//从链表头部进行删除
int popFront(Stu *pHead)
{
	//只有一个头指针
	if(pHead->next == NULL)
		return 0;
	
	Stu *pTmp = pHead->next;
	//只有一个头结点
	if(pTmp->next == NULL)
	{
		free(pTmp);
		pTmp = NULL;
		pHead->next = NULL;
		return 0;
	}
	
	pHead->next = pTmp->next;
	free(pTmp);
	pTmp = NULL;
	return 0;
}

int delByPos(Stu *pHead,int pos)
{
	Stu *pTmp = pHead->next;
	Stu *pPrev = pTmp;
	if(pos <= 0 || pos > getSize(pHead))
	{
		printf("pos valid\n");
		return -1;
	}
	if(pos == 1)
	{
		popFront(pHead);
		return 0;
	}
	while(--pos)
	{
		pPrev = pTmp;
		pTmp = pTmp->next;
	}
	pPrev->next = pTmp->next;
	free(pTmp);
	pTmp = NULL;

	return 0;
}

int delByData(Stu *pHead,char *data)
{
	Stu *pTmp = pHead->next;
	int index=1;
	while(pTmp->next)
	{
		if(memcmp(pTmp->name,data,strlen(data)) == 0)
		{
			delByPos(pHead,index);
			index--;
		}
		index++;
		pTmp = pTmp->next;
	}
}
void stuadduse(Use *pHead)
{
	Use g;
	int i=1;
	FILE *fp=fopen("use.txt","a");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	printf("添加用户的格式为 用户名+密码+类别(老师类别为t,学生类别为s,用户名和密码都为阿拉伯数字)eg:12 13 s\n");
		scanf("%d %d %c",&g.id,&g.passwd,&g.status);
		fwrite(&g,sizeof(g),1,fp);
	fclose(fp);
	fp=fopen("use.txt","r");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	while(fread(&g,sizeof(g),1,fp)!=0)
	{
		pushBacku(pHead,g);
	}
	showu(pHead);
	destroyu(pHead);
	fclose(fp);

}
void teaadduse(Use *pHead)
{
	Use g;
	int i=1;
	FILE *fp=fopen("use.txt","a");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	printf("添加用户的格式为 用户名+密码+类别(老师类别为t,学生类别为s,用户名和密码都为阿拉伯数字)eg:12 13 t\n");
		scanf("%d %d %c",&g.id,&g.passwd,&g.status);
		fwrite(&g,sizeof(g),1,fp);
	fclose(fp);
	fp=fopen("use.txt","r");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	while(fread(&g,sizeof(g),1,fp)!=0)
	{
		pushBacku(pHead,g);
	}
	showu(pHead);
	destroyu(pHead);
	fclose(fp);

}
void useinformation(Use *pHead)
{
	Use g;
	int i=1;
	FILE *fp=fopen("use.txt","r");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	while(fread(&g,sizeof(g),1,fp)!=0)
	{
		pushBacku(pHead,g);
	}
	showu(pHead);
	destroyu(pHead);
	fclose(fp);

}
void usedel(Use *pHead)
{
	Use g;
	int data;
	int i=1;
	scanf("%d",&data);
	
	FILE *fp=fopen("use.txt","r+");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	while(fread(&g,sizeof(g),1,fp)!=0)
	{
	printf("hello\n");
	printf("%d\n",g.id);
	if(g.id==data)
		continue;
	pushBacku(pHead,g);
	}
	showu(pHead);
	fclose(fp);
	fp=fopen("use.txt","w");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}

	Use *pTmp=pHead->next;
	while(pTmp)
	{
		fwrite(pTmp,sizeof(g),1,fp);
		pTmp=pTmp->next;
	}
	
	destroyu(pHead);
	fclose(fp);
}
int usetest(Use *pHead,int idd,int passwdd)
{
	Use g;
	FILE *fp=fopen("use.txt","r");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	while(fread(&g,sizeof(g),1,fp)!=0)
	{
		if(((g.id==idd && g.passwd==passwdd) && g.status=='s')==1)
		{
		fclose(fp);
		return 1;
		}
		if(((g.id==idd && g.passwd==passwdd )&& g.status == 't')==1)
		{
		fclose(fp);
		return 2;
		}
	}
	fclose(fp);
	return 0;
}
void addstudent(Stu* pHead)
{
	Stu g;
	FILE *fp=fopen("student.txt","a");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	printf("添加学生信息的格式是 姓名 + 学号 + 性别 + 分数,eg hanmeimei 1001 m 99\n");
	scanf("%s %d %c %d",g.name,&g.id,&g.gender,&g.score);
	fwrite(&g,sizeof(g),1,fp);
	fclose(fp);
	fp=fopen("student.txt","r");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	while(fread(&g,sizeof(g),1,fp)!=0)
	{
		pushBack(pHead,g);
	}
	show(pHead);
	destroy(pHead);
	fclose(fp);
	
}
int findstudent(Stu* pHead)
{
	printf("请输入学生的姓名 eg:hanmeimei\n");
	char name1[30];
	scanf("%s",name1);
	Stu g;
	FILE *fp=fopen("student.txt","r");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	while(fread(&g,sizeof(g),1,fp)!=0)
	{
	if(strcmp(g.name,name1)==0)
	{
	printf("您查询的信息为\n");
	printf("name=%s id= %d gender=%c score=%d\n",g.name,g.id,g.gender,g.score);
	fclose(fp);
	return 1;
	}
	}
	printf("查无此人\n");
	fclose(fp);
	return 1;

	
}
int findscore(Stu* pHead)
{
	printf("请输入学生的姓名 eg:hanmeimei\n");
	char name1[30];
	scanf("%s",name1);
	Stu g;
	FILE *fp=fopen("student.txt","r");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	while(fread(&g,sizeof(g),1,fp)!=0)
	{
	if(strcmp(g.name,name1)==0)
	{
	printf("您查询的成绩为\n");
	printf("name= %s, score=%d\n",g.name,g.score);
	fclose(fp);
	return 1;
	}
	}
	printf("查无此人\n");
	fclose(fp);
	return 1;
	
}
int findteach(Tea *pHead)
{
	Tea g;
	FILE *fp=fopen("teach.txt","r");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	while(fread(&g,sizeof(g),1,fp)!=0)
	{
		pushBackt(pHead,g);
	}
	showt(pHead);
	destroyt(pHead);
	fclose(fp);

}
int changestudent(Stu *pHead)
{
	printf("请输入学生的信息 eg:hanmeimei 1001 f 88\n");
	Stu h;
	scanf("%s %d %c %d",h.name,&h.id,&h.gender,&h.score);
	Stu g;
	FILE *fp=fopen("student.txt","r");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	while(fread(&g,sizeof(g),1,fp)!=0)
	{
	if(strcmp(g.name,h.name)==0)
	{
	pushBack(pHead,h);
	continue;
	}
	pushBack(pHead,g);
	}
	show(pHead);
	fclose(fp);
	fp=fopen("student.txt","w");
	Stu *pTmp=pHead->next;
	while(pTmp)
	{
		fwrite(pTmp,sizeof(g),1,fp);
		pTmp=pTmp->next;
	}

	fclose(fp);
	return 1;

	
}
void addteach(Tea *pHead)
{
	Tea g;
	FILE *fp=fopen("teach.txt","a");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	printf("添加学生信息的格式是 姓名 + 年龄 + 学科 + 等级,eg hanmeimei 35 math 3\n");
	scanf("%s %d %s %d",g.name,&g.age,g.subject,&g.rank);
	fwrite(&g,sizeof(g),1,fp);
	fclose(fp);
	fp=fopen("teach.txt","r");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	while(fread(&g,sizeof(g),1,fp)!=0)
	{
		pushBackt(pHead,g);
	}
	showt(pHead);
	destroyt(pHead);
	fclose(fp);
	
}
int changeteach(Tea *pHead)
{
	printf("请输入老师的信息 eg:hanmeimei 25 math 1\n");
	Tea h,g;
	scanf("%s %d %s %d",h.name,&h.age,h.subject,&h.rank);
	FILE *fp=fopen("teach.txt","r");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	while(fread(&g,sizeof(g),1,fp)!=0)
	{
	if(strcmp(g.name,h.name)==0)
	{
	pushBackt(pHead,h);
	continue;
	}
	pushBackt(pHead,g);
	}
	showt(pHead);
	fclose(fp);
	fp=fopen("teach.txt","w");
	Tea *pTmp=pHead->next;
	while(pTmp)
	{
		fwrite(pTmp,sizeof(g),1,fp);
		pTmp=pTmp->next;
	}

	fclose(fp);
	return 1;

	
}
int delteach(Tea *pHead)
{
	printf("请输入老师的名字 eg:hanmeimei\n");
	Tea h,g;
	scanf("%s",h.name);
	FILE *fp=fopen("teach.txt","r");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	while(fread(&g,sizeof(g),1,fp)!=0)
	{
	if(strcmp(g.name,h.name)==0)
	{
	continue;
	}
	pushBackt(pHead,g);
	}
	showt(pHead);
	fclose(fp);
	fp=fopen("teach.txt","w");
	Tea *pTmp=pHead->next;
	while(pTmp)
	{
		fwrite(pTmp,sizeof(g),1,fp);
		pTmp=pTmp->next;
	}

	fclose(fp);
	return 1;

	
}
int delstudent(Stu *pHead)
{
	printf("请输入学生姓名   eg:hanmeimei\n");
	Stu h;
	scanf("%s",h.name);
	Stu g;
	FILE *fp=fopen("student.txt","r");
	if(fp==NULL)
	{
		printf("failed\n");
		exit(0);
	}
	while(fread(&g,sizeof(g),1,fp)!=0)
	{
	if(strcmp(g.name,h.name)==0)
	{
	continue;
	}
	pushBack(pHead,g);
	}
	show(pHead);
	fclose(fp);
	fp=fopen("student.txt","w");
	Stu *pTmp=pHead->next;
	while(pTmp)
	{
		fwrite(pTmp,sizeof(g),1,fp);
		pTmp=pTmp->next;
	}

	fclose(fp);
	return 1;

	
}
`#include"stu.h"
//main.c
int a,b;
char c;
int main()
{
	
	welcome();
	welcomemain(a,b);


	return 0;
}

#ifndef STU_H
#define STU_H
//stu.h
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>


typedef struct stu
{
	char name[30];
	int id;
	char gender;
	int score;
	struct stu *next;

}Stu;
typedef struct tea
{
	char name[30];
	int 	age;
	char subject[30];
	int rank;
	struct tea *next;

}Tea;
typedef struct user
{
	int id;
	int passwd;
	char status;
	struct user *next;
}Use;

//创建头指针
Stu *initList();
Tea *initListT();
Use *initListu();
//清空链表
int clear(Stu *pHead);
int cleart(Tea *pHead);
int clearu(Use *pHead);
//销毁链表
int destroy(Stu *pHead);
int destroyt(Tea *pHead);
int destroyu(Use *pHead);
//从尾部插入
int pushBack(Stu *pHead,Stu data);
int pushBackt(Tea *pHead,Tea data);
int pushBacku(Use *pHead,Use data);
//获取链表长度
int getSize(Stu *pHead);
void stuadduse(Use *pHead);
void teaadduse(Use *pHead);
void useinformation(Use *pHead);
void usedel(Use *pHead);
int usetest(Use *pHead,int x,int y);
void addstudent(Stu *pHead);
int findstudent(Stu *pHead);
int findscore(Stu *pHead);
int findteach(Tea *pHead);
int changestudent(Stu *pHead);
void addteach(Tea *pHead);
int changeteach(Tea *pHead);
int delteach(Tea *pHead);
int delstudent(Stu *pHead);
#endif

#include "stu.h"
//这个代码是早期mian版本,现在已经没用了
void show(Stu *pHead)
{
	printf("--------------------------\n");
	Stu *pTmp = pHead->next;
	while(pTmp)
	{
		printf("%s %d %c %d\n",pTmp->name,pTmp->id,pTmp->gender,pTmp->score);
		pTmp = pTmp->next;
	}
}
void showt(Tea *pHead1)
{
	printf("--------------------------\n");
	Tea *pTmp = pHead1->next;
	while(pTmp)
	{
		printf("%s %d %s %d\n",pTmp->name,pTmp->workage,pTmp->subject,pTmp->rank);
		pTmp = pTmp->next;
	}
}
void showu(Use *pHead2)
{
	printf("--------------------------\n");
	Use *pTmp = pHead2->next;
	while(pTmp)
	{
		printf("%d %d %c\n",pTmp->id,pTmp->passwd,pTmp->status);
		pTmp = pTmp->next;
	}
}
int main()
{
	Stu a = {"hanmeimei",10001,'f',90};
	Stu b = {"lilei",10002,'m',80};
	Stu c = {"lily",10003,'f',91};
	Tea a1 = {"zhangsan",2,"chinese",2};
	Tea b1 = {"lisi",3,"math",4};
	Tea c1 = {"wangwu",5,"English",3};

	Use a2 = {1,111111,'r'};
	Use b2 = {2,123456,'t'};
	Use c2 = {51,111111,'s'};

	Stu *head = initList();
	Tea *head1 = initListT();
	Use *head2 = initListu();

	FILE *fp2=fopen("use.txt","wb");
	if(NULL==fp2)
	{
		printf("failed\n");
		return -1;
	}
	pushBacku(head2,a2);
	fwrite(&a2,sizeof(Use),1,fp2);
	showu(head2);

	pushBacku(head2,b2);
	fwrite(&b2,sizeof(Use),1,fp2);
	showu(head2);

	pushBacku(head2,c2);
	fwrite(&c2,sizeof(Use),1,fp2);
	showu(head2);

	FILE *fp1=fopen("teach.txt","wb");
	if(NULL==fp1)
	{
		printf("failed\n");
		return -1;
	}
	pushBackt(head1,a1);
	fwrite(&a1,sizeof(Tea),1,fp1);
	showt(head1);
	pushBackt(head1,b1);
	fwrite(&b1,sizeof(Tea),1,fp1);
	showt(head1);
	pushBackt(head1,c1);
	fwrite(&c1,sizeof(Tea),1,fp1);
	showt(head1);
	FILE *fp=fopen("student.txt","wb");	
	Stu d = {"lucy",10003,'f',91};
	pushBack(head,d);
	fwrite(&d,sizeof(Stu),1,fp);
	show(head);
/*	scanf("%s %d %c %d",d.name,&d.id,&d.gender,&d.score);
	pushBack(head,d);
	fwrite(&d,sizeof(Stu),1,fp);
	show(head);*/
	pushBack(head,a);	
	fwrite(&a,sizeof(Stu),1,fp);
	show(head);
	pushBack(head,b);	
	fwrite(&b,sizeof(Stu),1,fp);
	show(head);
	pushBack(head,c);	
	fwrite(&c,sizeof(Stu),1,fp);
	show(head);
	fclose(fp1);
	fclose(fp);
	fclose(fp2);
	cleart(head1);
	destroyt(head1);
	clear(head);
	show(head);
	clearu(head2);
	destroyu(head2);
	destroy(head);
	
	printf("--------------------------------------------------------------------------------\n");
	fp=fopen("student.txt","a");
	
	if(fp==NULL)
	{
		printf("fail\n");
		return 0;
	}
	int i=1;
	while(i)
	{
		scanf("%s %d %c %d\n",a.name,&a.id,&a.gender,&a.score);
		fwrite(&a,sizeof(a),1,fp);
		printf("halt  please input 0,others 1\n");
		printf("%d",&i);
	}
	fclose(fp);
	printf("-----------------------------\n");
	fp=fopen("student.txt","a");
	if(fp==NULL)
	{
		printf("failed\n");
		return -1;
	}
	
	head = initList();
	while(fread(&a,sizeof(Stu),1,fp)!=0)
	{
		printf("sdsa\n");
		pushBack(head,a);
	}
	show(head);
	fclose(fp);
	
	return 1;
}

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学生包含以下信息项:学号、姓名、学院、班级、高数成绩、英语成绩、C语言成绩、总分、平均分。 系统的主要功能包括: 1. 创建学生成绩信息文件,根据提示输入学生的各项信息,计算出总分和平均分,然后按学号对学生信息进行排序,并将排序后的学生成绩信息存储到一个二进制文件中。 2. 增加学生信息,在原有学生信息文件的基础上增加新的学生成绩信息,要求:增加后的学生信息仍按学号排序,并继续保存至原文件。 3. 删除学生信息,提示用户输入要进行删除操作的学号,如果在文件中有该信息存在,则将该学号所对应的学生信息删除,否则输出提示信息,并提示用户选择是否继续进行删除操作。 4. 修改学生信息,提示用户输入要进行修改操作的学号,如果在文件中有该息存在,则将提示用户输入该学号对应的要修改的选项,结果保存至原文件,并提示用户选择是否继续进行修改操作。 5. 按不同条件对学生信息进行查询操作,输出满足条件的学生信息。 (1) 按学号查询,输入一个学号,输出对应的学生信息。 (2) 按姓名查询,包括精确查询(输入全名),模糊查询(输入姓)。 (3) 按学院查询,输入学院名称,输出该学院的全部学生的信息。 (4) 按班级查询,输入班级名称,输出该班级的全部学生的信息。 6. 按不同条件对学生成绩进行统计工作。 (1) 按总分对学生信息进行排序(由高到低),输出排序后的信息,并将排序后的学生信息存放到一个新的二进制文件中。 (2) 按平均分统计各个分数段的学生人数(不及格,60-69,70-79,80-89,90-100)。 (3) 分别找出3门课程成绩最高的学生,并输出他们的信息。 (4) 分别统计出3门课程的不及格率,并输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值