学生信息管理系统(第一次.....)

时间:2024-02-24 09:35:38

因为我曾经做题都不看书。结果c语言书上的最后面文件的输入输出没有看。昨天学长让我们写个管理系统。我懵了。

就花了一个小时看了看文件的输入输出。就先写个简单的学生信息管理系统把。

假设遗漏希望各位留言指出。

我会改进的。

因为第一次写,代码粗糙请见谅。。

对了,我还发现一个问题,希望会的博友能回复下。

我想怎样才干把写入文件的数据在文本中换行。

我在文件后加上fputc(\'\n\'),是实现换行了,但是在查找的时候查找不到。

希望有人可以解答。

谢谢。!

#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
struct node
{
	char name[20],banji[20];//学生的姓名。班级 
	char  age[5],xuehao[21];//学生的年龄,学号。当然能够加入其他具体信息,比方手机号码,家庭住址等等、 
}stu[500];
FILE *fp;
int i;
bool cmp1(node x,node y)//依照学生的班级排序 
{
	if(strcmp(x.banji,y.banji)<0) return true;
	if(strcmp(x.banji,y.banji)==0&&strcmp(x.xuehao,y.xuehao)<0) return true;
	return false;
}
bool cmp2(node x,node y)//依照学生的学号排序 
{
	if(strcmp(x.xuehao,y.xuehao)<0) return true;
	if(strcmp(x.xuehao,y.xuehao)==0&&strcmp(x.banji,y.banji)<0) return true;
	return false;
}
void find()
{
	if((fp=fopen("susu.doc","r"))==NULL)
	{
		printf("不能打开文件\n");
		exit(0) ;
	}
	while(1)
	{ 
		system("cls");
		printf("**************************学生信息查找界面********************************\n");
		printf("                 1.依据姓名和班级查找\t\t2.依据学号查找\n");
		printf("                 3.返回主界面\n");
		printf("**************************************************************************\n");
		char ch=getchar();
		if(ch==\'1\') 
		{
			while(1)
			{
				system("cls");//清屏 
				int mark=-1;
				char na[20],ban[20];
				printf("请输入学生班级:");
				scanf("%s",ban);
				printf("请输入学生姓名:");
				scanf("%s",na);
				for(int j=0;j<i;j++)
				{
					fread(&stu[j],sizeof(struct node),1,fp);
					if(strcmp(stu[j].name,na)==0&&strcmp(stu[j].banji,ban)==0)
					mark=j;
				}
				if(mark!=-1)
				printf("%s %s %s %s\n",stu[mark].name,stu[mark].banji,stu[mark].xuehao,stu[mark].age);
				else
				printf("没有这个人\n");
				fclose(fp);
				getchar();
				printf("是否继续查找?是【Y】/否【N】");
				char ch=getchar();
				if(ch==\'n\'||ch==\'N\')
				break;
			}
		}
		if(ch==\'2\')
		{
			while(1)
			{
				system("cls");
				char num[21];
				int mark=-1;
				printf("请输入学生学号\n");
				scanf("%s",num);
				for(int j=0;j<i;j++)
				{
					fread(&stu[j],sizeof(struct node),1,fp);
					if(strcmp(stu[j].xuehao,num)==0)
					mark=j;
				}
				if(mark!=-1)
				printf("姓名:%s\t班级:%s\t学号:%s\t年龄:%s\n",stu[mark].name,stu[mark].banji,stu[mark].xuehao,stu[mark].age);
				else
				printf("没有此学号\n");
				fclose(fp);
				getchar();
				printf("是否继续查找?是【Y】/否【N】");
				char ch=getchar();
				if(ch==\'n\'||ch==\'N\')
				break;
			}
		}
		if(ch==\'3\')
		break;	
	} 
}
void add()//添加 
{
	if((fp=fopen("susu.doc","a"))==NULL)
	{
		printf("不能打开文件\n");
		exit(0) ;
	}
	printf("**************************学生信息加入界面********************************\n");
	while(1)
	{
		system("cls");//清屏 
		printf("请输入学生的班级:");
		scanf("%s",stu[i].banji);
		printf("请输入学生的姓名:");
		scanf("%s",stu[i].name);
		printf("请输入学生的学号: "); 
		scanf("%s",&stu[i].xuehao);
		printf("请输入学生的年龄: ");
		scanf("%s",&stu[i].age);
		if(fwrite(&stu[i],sizeof(struct node),1,fp)!=1)
		printf("写入错误\n");
		else
		printf("写入成功\n"); 
		getchar();
		printf("是否继续输入?是【Y】/否【N】");
		char ch=getchar();
		if(ch==\'y\'||ch==\'Y\')
		i++;
		else
		break;
	}
	fclose(fp);
}
void del()//解释下删除的过程,就是先仅仅读文件,找到须要删除的那个人,然后mark标记一下。在写文件。当写到mark时跳过。 
{
	while(1)
	{
		system("cls");
		printf("**************************学生信息删除界面********************************\n");
		printf("                 1.依据姓名和班级删除\t\t2.依据学号删除\n"); 
		printf("                 3.返回主菜单\n"); 
		printf("**************************************************************************\n");
		char ch=getchar();
		if(ch==\'1\')
		{
			while(1)
			{
				system("cls");
				if((fp=fopen("susu.doc","rb"))==NULL)
				{
					printf("error\n");
					exit(0); 
				}
				int mark=-1;
				char na[20],ban[20];
				printf("请输入学生班级:");
				scanf("%s",ban);
				printf("请输入学生姓名:");
				scanf("%s",na);
				for(int j=0;j<i;j++)
				{
					fread(&stu[j],sizeof(struct node),1,fp);
					if(strcmp(stu[j].name,na)==0&&strcmp(stu[j].banji,ban)==0)
					{
						mark=j;
						printf("确认删除:姓名:%s\t班级:%s\t学号:%s\t年龄:%s\n吗?(Y/N)\n",stu[mark].name,stu[mark].banji,stu[mark].xuehao,stu[mark].age);
						break;
					}
				}
				fclose(fp);
				if(mark==-1)
				printf("找不到这个人\n");
				else
				{
					getchar();
					char ch=getchar(); 
					if(ch==\'y\'||ch==\'Y\')
					{
						fp=fopen("susu.doc","wb");
						for(int j=0;j<i;j++)
						{
							if(j!=mark)
							fwrite(&stu[j],sizeof(struct node),1,fp);
						}
						fclose(fp);
						printf("删除成功\n");
					}
					else
					printf("删除失败\n");
				}
				getchar();
				printf("是否继续删除?是【Y】/否【N】\n");
				ch=getchar();
				if(ch==\'y\'||ch==\'Y\')
				i--;
				else
				break;
			}
		}
		if(ch==\'2\')
		{
			while(1)
			{
				system("cls");
				if((fp=fopen("susu.doc","rb"))==NULL)
				{
					printf("error\n");
					exit(0); 
				}
				int mark=-1;
				char num[21];
				printf("请输入学生学号:");
				scanf("%s",num);
				for(int j=0;j<i;j++)
				{
					fread(&stu[j],sizeof(struct node),1,fp);
					if(strcmp(stu[j].xuehao,num)==0)
					{
						mark=j;
						printf("确认删除:姓名:%s\t班级:%s\t学号:%s\t年龄:%s\n吗?(Y/N)\n",stu[mark].name,stu[mark].banji,stu[mark].xuehao,stu[mark].age);
						break;
					}
				}
				fclose(fp);
				if(mark==-1)
				printf("找不到这个人\n");
				else
				{
					getchar();
					char ch=getchar(); 
					if(ch==\'y\'||ch==\'Y\')
					{
						fp=fopen("susu.doc","wb");
						for(int j=0;j<i;j++)
						{
							if(j!=mark)
							fwrite(&stu[j],sizeof(struct node),1,fp);
						}
						fclose(fp);
						printf("删除成功\n");
					}
					else
					printf("删除失败\n");
				}
				getchar();
				printf("是否继续删除?是【Y】/否【N】\n");
				ch=getchar();
				if(ch==\'y\'||ch==\'Y\')
				i--;
				else
				break;
			}
		}
		if(ch==\'3\')
		break;
	}
}
void sca()//浏览 
{
	system("cls");
	printf("**************************学生信息浏览界面********************************\n");
	if((fp=fopen("susu.doc","rb"))==NULL)
	{
		printf("error\n");
		exit(0); 
	}
	printf("       \t姓名\t\t班级\t\t学号\t\t年龄\n");
	for(int j=0;j<i;j++)
	{
		fread(&stu[j],sizeof(struct node),1,fp);
		printf("%15s%15s%15s%15s\n",stu[j].name,stu[j].banji,stu[j].xuehao,stu[j].age);
	}
	printf("**************************************************************************\n");
	fclose(fp);
	system("pause");
}
void arry()//排序 
{
	if((fp=fopen("susu.doc","rb"))==NULL)
	{
		printf("error\n");
		exit(0);
	}
	while(1)
	{
		node sort_temp[500];
		system("cls");
		printf("**************************学生信息排序界面********************************\n");
			printf("                 1.依据班级排序\t\t2.依据学号排序\n"); 
			printf("                 3.返回主菜单\n"); 
		printf("**************************************************************************\n");
		char ch=getchar();
		if(ch==\'1\')
		{
			for(int j=0;j<i;j++)
			{
				fread(&stu[j],sizeof(struct node),1,fp);
				sort_temp[j]=stu[j];
			}
			fclose(fp);
			fp=fopen("susu.doc","wb");
			sort(sort_temp,sort_temp+i,cmp1);
			for(int j=0;j<i;j++)
			fwrite(&sort_temp[j],sizeof(struct node),1,fp);
			fclose(fp);
			sca();
		}
		if(ch==\'2\')
		{
			for(int j=0;j<i;j++)
			{
				fread(&stu[j],sizeof(struct node),1,fp);
				sort_temp[j]=stu[j];
			}
			fclose(fp);
			fp=fopen("susu.doc","wb");
			sort(sort_temp,sort_temp+i,cmp2);
			for(int j=0;j<i;j++)
			fwrite(&sort_temp[j],sizeof(struct node),1,fp);
			fclose(fp);
			sca();
		}
		if(ch==\'3\')
		break;
	}
}
int get_i()//获得有多少个学生 
{
	if((fp=fopen("susu.doc","r"))==NULL)
	fopen("susu.doc","w");
	for(i=0;;i++)
	{
		if(fread(&stu[i],sizeof(struct node),1,fp)==1)
		continue;
		else
		break;
	}
	fclose(fp);
	return i;
}
int main()
{
	while(1)
	{
		system("cls");
		printf("**************************学生信息管理系统********************************\n");
		printf("                     如今本院共同拥有学生%d人\n",get_i());
		printf("                 1.查询学生信息\t\t2.新增学生信息\n");
		printf("                 3.删除学生信息\t\t4.浏览学生信息\n");
		printf("                 5.学生信息排序\t\t6.退出程序\n");
		printf("**************************************************************************\n");
		char ch=getchar();
		if(ch==\'1\')//查询学生信息 
		find();
		else if(ch==\'2\')//加入学生信息 
		add();
		else if(ch==\'3\')//删除学生信息 
		del();
		else if(ch==\'4\')//浏览学生信息 
		sca();
		else if(ch==\'5\')//对学生信息排序 
		arry();
		else
		return 0;
		getchar();
	}
	return 0; 
}

1.删除学生信息。找不到学生无回复已解决大笑