欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

大一新生链表简单操作系统

程序员文章站 2022-07-15 08:46:29
...

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
enum color {black,blue};

typedef struct student{

char name[100];

char id[100];

int  myclass;

int  myscore;

}STU;
typedef struct list{

STU data;

struct list *next;

}LIST;

void readdatafromfile(LIST *head);
void savedatatofile(LIST *head);

void doorinterface()
{
system(“color 0c”);
printf("*********************************************************************\n");
printf("@@@@@@@@@@@@@@@@@@@欢迎使用兰华伟学生信息管理系统@@@@@@@@@@@@@@@@@@@@@\n");
printf("&&&&&&&&&&&&&&&&&&&请仔细阅读菜单选项输入对应序号&&&&&&&&&&&&&&&&&&&\n");
printf("*********************************************************************\n");//进入标题

}
void interface()
{
system(“color 17”);
printf("******\n");
printf(" |学生信息管理系统|\n");
printf(" |01输入信息
|\n");
printf(" |02浏览信息
|\n");
printf(" |03查找信息
|\n");
printf(" |04修改信息
|\n");
printf(" |05删除信息
|\n");
printf(" |06排序信息
|\n");
printf(" |00退出系统
|\n");
printf("************************************************\n");

}//简单信息操作
void logininterdace()//登录密码阶段,有注册和文件操作## 标题
{
FILE *fp;
int flag=3;
char tempcount[100];

char tempword[100]; 

char infocount[100];

char infoword[100];

printf("是否有账户(Y|N)\n");

char judgement;
scanf(" %c",&judgement);
if(judgement=='N'||judgement=='n')
{
	printf("请输入密保问题答案:本人帅不帅(Y|N)\n");
	
	scanf(" %c",&judgement);
	
    if(judgement=='n'||judgement=='N')
    {
    	printf("密保错误,看来非本人\n正在退出系统.....");
    	sleep(2);
    	exit(0);
	}
	
	printf("新建账户\n请在下面注册新的管理员账户密码:\n");
	
	printf("账户:"); 
	
	scanf(" %s",tempcount);
	
	fp=fopen("D:\\cfile\\accountname.txt","w+");
	
	fputs(tempcount,fp);
	
	fclose(fp);
	
	fp=fopen("D:\\cfile\\accountpassword.txt","w+");
	
	printf("密码:");
	
	scanf(" %s",tempcount);
	
	fputs(tempcount,fp);
	
	fclose(fp);
	
	printf("注册成功\n");

}
fp=fopen("D:\\cfile\\accountname.txt","r+");
	
fgets( infocount,100,fp);
	
close(fp);
		
fp=fopen("D:\\cfile\\accountpassword.txt","r+");
	
fgets( infoword,100,fp);
	
close(fp);

while(1)
{

	printf("在下面输入管理员账户和密码:\n");
	
	printf("账户:");
	
	scanf(" %s",tempcount);
	
	printf("密码:");
	
	scanf(" %s",tempword);
	
if(strcmp(infocount,tempcount)==0&&strcmp(infoword,tempword)==0)
	{
		
		printf("密码正确\n登录成功\n正在登录系统,请稍等.....");
		sleep(2);
		break;
	}
	
else 
	{
		
		printf("密码或者账号错误登录失败\n");
		
		flag--;
		
		if(flag==0)
		{
			printf("三次错误,系统正在退出.....\n");
			sleep(2); 
			exit(0);
		}
		printf("还有%d次机会哦\n",flag);

	} 
	
}

}

LIST *createhead()//函数化创建表头
{
LIST *p=(LIST *)malloc(sizeof(LIST));

p->next=NULL;

return p;

}
LIST *createnode(STU tempdata)//创造节点
{
LIST *p=(LIST *)malloc(sizeof(LIST));

p->data=tempdata;

p->next=NULL;

return p;

}
void insertByHead(LIST *head,STU tempdata)
{
LIST *p=createnode(tempdata);

p->next=head->next;//头插法;【这是head】 (我们从这里插进来)【这是head->next】
  
head->next=p;
savedatatofile(head);

}
void displaydata(LIST *head)//打印数据
{
LIST *pmove=head->next;

printf("下面是学生信息表\n");
printf("姓名\t学号\t\t班级\t分数\n");
while(pmove!=NULL)
{
	printf("%s\t%s\t\t%d\t%d\n",pmove->data.name,pmove->data.id,pmove->data.myclass,pmove->data.myscore);
	
	pmove=pmove->next;
	
}
printf("\n");

}
void Deletenum(LIST *head,char *id)//删除信息
{
LIST *pmove=head->next;

LIST *pmoveleft=head;

while(strcmp(pmove->data.id,id)!=0)
{
	pmoveleft=pmove;
	
	pmove=pmove->next;
	
}
pmoveleft->next=pmove->next;

free(pmove);
savedatatofile(head);

}

void isprintf(LIST *pmove)//这是根据学号查找,因为学号只有一个。
{
printf(“下面是查找的信息:\n”);
printf(“姓名\t学号\t\t班级\t分数\n”);
printf("%s\t%s\t\t%d\t%d\n",pmove->data.name,pmove->data.id,pmove->data.myclass,pmove->data.myscore);
}
LIST *searchByid(LIST *head,char *id)
{

LIST *pmove=head->next;
if(pmove==NULL)
{
	return pmove;
}
else
{
	while(strcmp(pmove->data.id,id)!=0)
	{
		pmove=pmove->next;
		if(pmove==NULL)
		{
			break;
		 } 
	}
	
	return pmove;
}

}
void serchByname(LIST *head,char *name)
{
LIST *pmove=head->next;
if(pmove==NULL)
{
printf(“链表为空\n”);
return;
}
else
{
while(strcmp(pmove->data.name,name)!=0)
{

		pmove=pmove->next;
		if(pmove==NULL)
		{
			printf("对不起,库里没找到这个名字\n");
			return;
		}
		
		
	}
	
		printf("姓名\t学号\t\t班级\t分数\n");
		
		printf("%s\t%s\t\t%d\t%d\n",pmove->data.name,pmove->data.id,pmove->data.myclass,pmove->data.myscore);
		
		pmove=pmove->next;
		
		  
		
	while(pmove!=NULL)
	{
	  if(strcmp(pmove->data.name,name)==0)
	   {
	  	
	  		printf("%s\t%s\t\t%d\t%d\n",pmove->data.name,pmove->data.id,pmove->data.myclass,pmove->data.myscore);
	  		
	   }
	  
        pmove=pmove->next;
	
	}
		
	return;	
	
}

}
void serchByscore(LIST *head,int score)
{
LIST *pmove=head->next;
if(pmove==NULL)
{
printf(“链表为空\n”);
return;
}
else
{
while(pmove->data.myscore!=score)
{
pmove=pmove->next;

		if(pmove==NULL)
		{
			printf("对不起,库里没找到有这个分数的学生\n");
			return;
		}
		
		
	}
	
	
		printf("姓名\t学号\t\t班级\t分数\n");
		
		printf("%s\t%s\t\t%d\t%d\n",pmove->data.name,pmove->data.id,pmove->data.myclass,pmove->data.myscore);
		
		pmove=pmove->next;
		
		  
		
	while(pmove!=NULL)
	{
	  if(pmove->data.myscore==score)
	  {
	  	
	  		printf("%s\t%s\t\t%d\t%d\n",pmove->data.name,pmove->data.id,pmove->data.myclass,pmove->data.myscore);
	  		
	  }
	  
        pmove=pmove->next;
	
	}
		
	return;	
	
}

}

void listsortupbyscore(LIST *head)
{
LIST *pmove=NULL;
LIST *pmoveleft=NULL;
LIST *temp;
for(pmoveleft=head->next;pmoveleft!=NULL;pmoveleft=pmoveleft->next)
{

	for(pmove=pmoveleft->next;pmove!=NULL;pmove=pmove->next)
	{
		if(pmove->data.myscore<pmoveleft->data.myscore)
		{
			temp->data=pmove->data;
			pmove->data=pmoveleft->data;
			pmoveleft->data=temp->data;
		}
	}
	
}

}
void listsortdownbyscore(LIST *head)
{
LIST *pmove=NULL;
LIST *pmoveleft=NULL;
LIST *temp;
for(pmoveleft=head->next;pmoveleft!=NULL;pmoveleft=pmoveleft->next)
{

	for(pmove=pmoveleft->next;pmove!=NULL;pmove=pmove->next)
	{
		if(pmove->data.myscore>pmoveleft->data.myscore)
		{
			temp->data=pmove->data;
			pmove->data=pmoveleft->data;
			pmoveleft->data=temp->data;
		}
	}
	
}

}

void listsortupbyid(LIST *head)
{
LIST *pmove=NULL;
LIST *pmoveleft=NULL;
LIST *temp;
for(pmoveleft=head->next;pmoveleft!=NULL;pmoveleft=pmoveleft->next)
{

	for(pmove=pmoveleft->next;pmove!=NULL;pmove=pmove->next)
	{
		if(strcmp(pmoveleft->data.id,pmove->data.id)>0)
		{
			temp->data=pmove->data;
			pmove->data=pmoveleft->data;
			pmoveleft->data=temp->data;
		}
	}
	
}

}
void listsortdownbyid(LIST *head)
{
LIST *pmove=NULL;
LIST *pmoveleft=NULL;
LIST *temp;
for(pmoveleft=head->next;pmoveleft!=NULL;pmoveleft=pmoveleft->next)
{

	for(pmove=pmoveleft->next;pmove!=NULL;pmove=pmove->next)
	{
		if(strcmp(pmoveleft->data.id,pmove->data.id)<0)
		{
			temp->data=pmove->data;
			pmove->data=pmoveleft->data;
			pmoveleft->data=temp->data;
		}
	}
	
}

}
//文件操作;
void readdatafromfile(LIST *head)
{
FILE *fp;
STU tempdata;
fp=fopen(“D:\cfile\student.txt”,“r”);
if(fp==NULL)
{
fp=fopen(“D:\cfile\student.txt”,“w”);
}
while(fscanf(fp,"%s\t%s\t\t%d\t%d\n",tempdata.name,tempdata.id,&tempdata.myclass,&tempdata.myscore)!=EOF)
{
insertByHead(head,tempdata);
memset(&tempdata,0,sizeof(tempdata));
}
fclose(fp);
}
void savedatatofile(LIST *head)
{

FILE *fp;
LIST *pmove=head->next;
fp=fopen("D:\\cfile\\student.txt","w");
while(pmove!=NULL)
{
   fprintf(fp,"%s\t%s\t\t%d\t%d\n",pmove->data.name,pmove->data.id,pmove->data.myclass,pmove->data.myscore);
	pmove=pmove->next;
}
 fclose(fp);

}
int main()
{
doorinterface();
logininterdace();
STU tempdata;
LIST *list=createhead();
readdatafromfile(list);
while(1)
{
system(“CLS”);
interface();

	printf("请在下面输入(0~6)你的指令:\n"); 
	
	int choice;
	
	scanf("%d",&choice);
	
	switch(choice)
	{
		case 0:
			
		printf("【系统已退出】");
		system("PAUSE");
		exit(0);
		break;
		
		case 1:
			printf("\t\t【插入信息】\n");
			
		 printf("请在下面依次录入姓名,六位数学号,班级,总分\n");
		
		scanf("%s %s %d %d",tempdata.name,tempdata.id,&tempdata.myclass,&tempdata.myscore);
		
		insertByHead(list,tempdata);
		
		printf("信息已经录入\n");
		system("PAUSE");
		break;
		
		case 2:	printf("\t\t【浏览信息】\n");
			displaydata(list);
			system("PAUSE");
			break;
			
		case 3:	printf("\t\t【查找信息】\n");
		
		   printf("根据序号输入你查找的方式:\n");
		   printf("【0】退出本操作\n");
		   
		   printf("【1】姓名\n");
		   
		   printf("【2】学号\n");
		   
		   printf("【3】总分\n");
		   
		   int choice3;
		   
		   scanf("%d",&choice3);
		   switch(choice3)
		   {
		   	case 0:
		   	
		   	printf("已经退出查找操作\n");
		   	break;
		   	
		   	case 1:
			   printf("请在下面输入你要查找的名字:\n");
			   
			   scanf(" %s",tempdata.name);
			   
			   serchByname(list,tempdata.name);
			   
			   break;
			 case 2:
			 	printf("请在下面输入你要查找的学号:\n");
			 	
			 	scanf(" %s",tempdata.id);
			 	
			 	LIST *nowmove=searchByid(list,tempdata.id);
			 	
		           	if(nowmove==NULL)
		        	{
		         		printf("抱歉信息库没有找到这个学生\n");
		         	}
			
			
		          	else 
		          	{
		              isprintf(nowmove); 
		
		            }
		         	break;
		    case 3:
		    	
		    	printf("请输入你要查的分数\n");
				scanf(" %d",&tempdata.myscore);
				serchByscore(list,tempdata.myscore);
				break;
			default:
				printf("对不起,无法识别,退出查找操作\n");
				break;

		   	
			} 
		   system("PAUSE");
		
			break;
			
			
			
		case 4:	printf("\t\t【修改信息】\n");
		
			printf("请输入你要修改的学生的学号\n");
			
			scanf("%s",tempdata.id);
			
			LIST *nowmove=searchByid(list,tempdata.id);
			if(nowmove==NULL)
			{
				printf("抱歉信息库没有找到这个学生\n");
			}
			
			
			else 
			{
			printf("信息库里找到这个学生了\n") ;
			
			printf("请输入将要修改后的姓名 学号 班级 总分\n");
			
			scanf("%s %s %d %d",nowmove->data.name,nowmove->data.id,&nowmove->data.myclass,&nowmove->data.myscore);
			savedatatofile(list);
			printf("修改成功\n");
		    }
		    system("PAUSE");
			break;
			
			
			
			
		case 5:		printf("\t\t【删除信息】\n");
		
		printf("请在下面输入你要删除的学号:\n");
		
		scanf(" %s",tempdata.id);
		
		LIST *nownode=searchByid(list,tempdata.id);
		
		if(nownode==NULL)
		{
			printf("抱歉,数据库里没有此学生\n");
		}
		
		
		else
		{
		
		Deletenum(list,tempdata.id);
		
		printf("删除成功\n");
       	}
		system("PAUSE");
		break;
		case 6:
			printf("\t\t【排序信息】\n");
			
			printf("请输入以下指令以决定排序\n");
			
		   printf("【0】退出本操作\n");

			printf("【1】总分升序\n");
			
			printf("【2】总分降序\n");
			
			printf("【3】学号升序\n");
			
			printf("【4】学号降序\n");
		
			int  choicesort;
			int flag=1;
			
			scanf("%d",&choicesort);
			switch(choicesort)
			{
				case 0:
		   	printf("已经退出查找操作\n");
		   	break;
				
				case 1:
					printf("总分升序\n");
			listsortupbyscore(list);
			break;		
					
				case 2:
					printf("总分降序\n");
			listsortdownbyscore(list);
			
			break;
			    
			     case 3:
			     	printf("学号升序\n");
			     listsortupbyid(list);
			     	break;
			     	 
			    case 4:
			    	printf("学号降序\n");
			    	listsortdownbyid(list);
			    	break;
			    	
			    default:
			    	printf("无法识别指令\n排序失败\n");
			    	flag=0;
			    	
			    	break;

			  
			}
			 
			 if(flag==1)
			{
			 
			printf("排序完成\n");
			
			printf("是否查看排序信息(N|Y)\n");
			
			char choice6;
			
			scanf(" %c",&choice6);
			
			if(choice6=='Y'||choice6=='y')
			{
				displaydata(list);
			}
			system("pause");
	    	}
			break;
	   
		default :
			
		printf("输入有错重新输入\n");
		system("PAUSE");
		
		break; 

	} 
}

return 0;	

}
菜鸟一个,多多包涵