#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
typedef struct List{
long long stdnum;//学号
char stuname[100];
char sex[100];
char stuclass[100];
char stusubject[100];
char stucollege[100];
struct List *next;
}AnimeList;
AnimeList *Creat(int n);//创建链表
AnimeList *ListSort(AnimeList *p);//链表排序按照从小到大的顺序,返回的是排序后链表的首地址,
AnimeList *ListPartFind(AnimeList *p,int n);//返回第N项的地址
void Insert(AnimeList *p);//添加节点
void Change(AnimeList *p);//改变节点数据
void Delete(AnimeList *p);//删除节点(选择删除)
void Delete_P(AnimeList *p,int n);//删除第N项节点
void PrintList(AnimeList *P);//输出(自选)
void ListSearch(AnimeList *p);//按照条件搜索
void CopyListPart(AnimeList *a,AnimeList *b);//复制后面给前面
int ListSearchMin(AnimeList *p);//寻找最小学号的是第几项
int ListLength(AnimeList *p);//返回链表长度
void Mananger(char n,AnimeList *P);
void UI();
void welcome_menu();
int main(){
int n;
printf("欢迎使用学生信息管理系统\n首先请输入你想存储的信息个数\n");
scanf("%lld",&n);
AnimeList *p=Creat(n);
char t;
getchar();
while(1){
UI();
scanf("%c",&t);
if(t=='7'){
p=ListSort(p);
p=ListSort(p);
}
Mananger(t,p);
}
return 0;
}
AnimeList *Creat(int n){
AnimeList *head,*end,*node;
head=(AnimeList *)malloc(sizeof(AnimeList));
end=head;
int i=0;
while(i++<n){
node=(AnimeList *)malloc(sizeof(AnimeList));
printf("请输入学生学号\n");
scanf("%lld",&node->stdnum);
printf("请输入学生姓名\n");
scanf("%s",&node->stuname);
printf("请输入学生性别\n");
scanf("%s",&node->sex);
printf("请输入学生班级\n");
scanf("%s",&node->stuclass);
printf("请输入学生学院\n");
scanf("%s",&node->stucollege);
printf("请输入学生专业\n");
scanf("%s",&node->stusubject);
printf("创建完成,数据存储成功\n\n");
end->next=node;
end=node;
}
end->next=NULL;
return head;
}
int ListLength(AnimeList *p){
AnimeList *node=p->next;
int t=0;
while(node!=NULL){
t++;
node=node->next;
}
return t;
}
void Insert(AnimeList *p){
AnimeList *node=p,*end;
printf("请选择在第几项插入\n");
int n,i=0;
char c;
scanf("%lld",&n);
printf("请选择前插还是后插\n前插(1)\n后插(2)\n");
getchar();
while(1){
i=0;
scanf("%c",&c);
if(c=='1'){
i=1;
while(i<n){
node=node->next;
i++;
}
end=(AnimeList *)malloc(sizeof(AnimeList));
printf("请输入学生学号\n");
scanf("%lld",&end->stdnum);
printf("请输入学生姓名\n");
scanf("%s",&end->stuname);
printf("请输入学生性别\n");
scanf("%s",&end->sex);
printf("请输入学生班级\n");
scanf("%s",&end->stuclass);
printf("请输入学生学院\n");
scanf("%s",&end->stucollege);
printf("请输入学生专业\n");
scanf("%s",&end->stusubject);
printf("创建完成,数据存储成功\n\n");
end->next=node->next;
node->next=end;
break;
}
else if(c=='2'){
while(i++<n)
node=node->next;
end=(AnimeList *)malloc(sizeof(AnimeList));
printf("请输入学生学号\n");
scanf("%lld",&end->stdnum);
printf("请输入学生姓名\n");
scanf("%s",&end->stuname);
printf("请输入学生性别\n");
scanf("%s",&end->sex);
printf("请输入学生班级\n");
scanf("%s",&end->stuclass);
printf("请输入学生学院\n");
scanf("%s",&end->stucollege);
printf("请输入学生专业\n");
scanf("%s",&end->stusubject);
end->next=node->next;
node->next=end;
break;
}
else
printf("输入错误,请重新输入\n");
}
}
void PrintList(AnimeList* P){
int n,i;
AnimeList* p=P;
char c;
getchar();
while(1){
printf("请选择\n输出特定单项(1)\n输出全部(2)\n");
scanf("%c",&c);
if(c=='1'){
i=0;
printf("要输出第几项?\n");
scanf("%lld",&n);
while(i<n){
p=p->next;
i++;}
printf("学号:%lld\n学生性别:%s\n学生姓名:%s\n学生学院:%s\n学生专业:%s\n学生班级:%s\n",p->stdnum,p->sex,p->stuname,p->stucollege,p->stusubject,p->stuclass);
break;
}
else if(c=='2'){
p=p->next;
while(p!=NULL){
printf("学号:%lld\n学生性别:%s\n学生姓名:%s\n学生学院:%s\n学生专业:%s\n学生班级:%s\n\n",p->stdnum,p->sex,p->stuname,p->stucollege,p->stusubject,p->stuclass);
p=p->next;
}
break;
}
else
printf("输入错误,请重新输入\n");
}
}
void Change(AnimeList *p){
AnimeList *node=p;
int n,i=0;
printf("现在一共有%lld项,要改哪个?\n",ListLength(p));
scanf("%lld",&n);
while(i<n){
node=node->next;
i++;
}
while(1){
printf("请选择要改的地方\n1)学号\n2)学生性别\n3)学生姓名\n4)学生学院\n5)学生专业\n6)学生班级\n");
scanf("%d",&n);
if(n==1){
printf("修改后的学号:\n");
scanf("%lld",&node->stdnum);
break;
}
else if(n==2){
printf("修改后的学生性别:\n");
scanf("%s",&node->sex);
break;
}
else if(n==3){
printf("修改后的学生姓名:\n");
scanf("%s",&node->stuname);
break;
}
else if(n==4){
printf("修改后的学生学院:\n");
scanf("%s",&node->stucollege);
break;
}
else if(n==5){
printf("修改后的学生专业:\n");
scanf("%s",&node->stusubject);
break;
}
else if(n==6){
printf("修改后的学生班级:\n");
scanf("%s",&node->stuclass);
break;
}
else
printf("输入错误,请重新输入\n");
}
}
void Delete(AnimeList *p){
AnimeList *node=p,*end;
int n,i=0;
printf("现在有%d项,你要删除第几项?\n",ListLength(p));
scanf("%lld",&n);
while(i<n-1){
node=node->next;
i++;
}
end=node->next;
node->next=end->next;
free(end);
}
void ListSearch(AnimeList *p){
AnimeList *node=p;
printf("请选择搜索方式\n1)按照学号2)按照姓名3)按照学院4)按照专业\n");
int i,n,t=0,f=0;
char a[100];
long long s;
while(1){
f=0;
scanf("%lld",&n);
if(n==1){
printf("请输入要搜索的学号\n");
scanf("%lld",&s);
while(node->next!=NULL){
t++;
node=node->next;
if(node->stdnum==s){
printf("找到了,是第%d项\n",t);
printf("学号:%lld\n学生性别:%s\n学生姓名:%s\n学生学院:%s\n学生专业:%s\n学生班级:%s\n",node->stdnum,node->sex,node->stuname,node->stucollege,node->stusubject,node->stuclass);
f++;
}
if(node->next==NULL)
break;
}
if(node->next==NULL&&f==0)
printf("没找到\n");
break;
}
else if(n==2){
printf("请输入要搜索的学生姓名\n");
scanf("%s",&a);
while(node->next!=NULL){
t++;
node=node->next;
if(strcmp(node->stuname,a)==0){
printf("找到了,是第%d项\n",t);
printf("学号:%lld\n学生性别:%s\n学生姓名:%s\n学生学院:%s\n学生专业:%s\n学生班级:%s\n",node->stdnum,node->sex,node->stuname,node->stucollege,node->stusubject,node->stuclass);
f++;
}
if(node->next==NULL)
break;
}
if(node->next==NULL&&f==0){
printf("没找到\n");
}
break;
}
else if(n==3){
printf("请输入要搜索的学生学院\n");
scanf("%s",&a);
while(node->next!=NULL){
t++;
node=node->next;
if(strcmp(node->stucollege,a)==0){
printf("找到了,是第%d项\n",t);
printf("学号:%lld\n学生性别:%s\n学生姓名:%s\n学生学院:%s\n学生专业:%s\n学生班级:%s\n",node->stdnum,node->sex,node->stuname,node->stucollege,node->stusubject,node->stuclass);
f++;
}
if(node->next==NULL)
break;
}
if(node->next==NULL&&f==0){
printf("没找到\n");
}
break;
}
else if(n==4){
printf("请输入要搜索的学生专业\n");
scanf("%s",&a);
while(node->next!=NULL){
t++;
node=node->next;
if(strcmp(node->stusubject,a)==0){
printf("找到了,是第%d项\n",t);
printf("学号:%lld\n学生性别:%s\n学生姓名:%s\n学生学院:%s\n学生专业:%s\n学生班级:%s\n",node->stdnum,node->sex,node->stuname,node->stucollege,node->stusubject,node->stuclass);
f++;
}
if(node->next==NULL)
break;
}
if(node->next==NULL&&f==0){
printf("没找到\n");
}
break;
}
else
printf("输入错误,请重新输入\n");
}
}
int ListSearchMin(AnimeList *p){
int i=1,index=1;
AnimeList *head=p->next;
long long r=head->stdnum;
while(head->next!=NULL){
head=head->next;
i++;
if(head->stdnum<r){
index=i;
}
}
return index;
}
void CopyListPart(AnimeList *a,AnimeList *b){
a->stdnum=b->stdnum;
strcpy(a->sex,b->sex);
strcpy(a->stuname,b->stuname);
strcpy(a->stucollege,b->stucollege);
strcpy(a->stusubject,b->stusubject);
strcpy(a->stuclass,b->stuclass);
}
AnimeList *ListPartFind(AnimeList *p,int n){
p=p->next;
int i=1;
while(i<n){
p=p->next;
i++;
}
return p;
}
void Delete_P(AnimeList *p,int n){
AnimeList *node=p,*end;
int i=0;
while(i<n-1){
node=node->next;
i++;
}
end=node->next;
node->next=end->next;
free(end);
}
AnimeList *ListSort(AnimeList *p){
AnimeList *head_o=p,*node,*end,*head,*min;
head=(AnimeList *)malloc(sizeof(AnimeList));
end=head;
int t=ListLength(p);
int i=0;
int m;
while(p->next!=NULL){
node=(AnimeList *)malloc(sizeof(AnimeList));
m=ListSearchMin(p);
min=ListPartFind(p,m);
CopyListPart(node,min);
Delete_P(p,m);
end->next=node;
end=node;
}
end->next=NULL;
return head;
}
void Mananger(char n,AnimeList *P){
switch(n){
case '1':
Insert(P);
system("PAUSE");
break;
case '2':
Change(P);
system("PAUSE");
break;
case '3':
Delete(P);
system("PAUSE");
break;
case '4':
PrintList(P);
system("PAUSE");
break;
case '5':
printf("当前有%d份学生信息\n",ListLength(P));
system("PAUSE");
break;
case '6':
ListSearch(P);
system("PAUSE");
break;
case '7':
printf("信息已经按照学生编号排序完成\n");
system("PAUSE");
break;
case '0':
printf("正在退出程序,谢谢使用\n");
system("PAUSE");
exit(0);
break;
default :
printf("输入错误请重新输入\n");
break;
}
}
void UI(){
system("cls");
printf("\t\t|* * * * * * 欢迎使用* * * * * * |\n");
printf("\t\t|.....................................|\n");
printf("\t\t| 请做出你的选择 (0-7) |\n");
printf("\t\t|.....................................|\n");
printf("\t\t| 1----增加信息 |\n");
printf("\t\t| 2----修改信息 |\n");
printf("\t\t| 3----删除信息 |\n");
printf("\t\t| 4----输出信息 |\n");
printf("\t\t| 5----返回当前信息份数 |\n");
printf("\t\t| 6----搜索信息 |\n");
printf("\t\t| 7----信息排序 |\n");
printf("\t\t| 0----退出系统 |\n");
printf("\t\t|.....................................|\n");
printf("\t\t|* * * * * * * * * * * * * * * * * * *|\n");
}
学生管理系统(操作系统)(半成品)
最新推荐文章于 2024-04-26 21:06:54 发布