大一新生链表简单操作系统
#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;
}
菜鸟一个,多多包涵
上一篇: 大一新生“心声博客”One