信息排序不出结果,没有实现信息修改功能,这个程序是我在社区里面复制粘贴别人,但我忘了是复制粘贴谁的了,自己改了改,所以相似度较高,原主看见就在此赔个不是。对编程真的是一窍不通啊。目标是做个图片里面的样子
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 2
#define N 4
typedef struct stu
{
char id[20];//学号
char name [10];//姓名
char sex[20];//性别
char tel[20];//手机号码
int cla;//班级
char stu_lesson[N][50];//学生选课
}STU;
typedef struct list
{
STU data;
struct list *next;
}LIST;//创建链表结构体
LIST *Creat_List(STU s[]);//链表的创建
int Stu_Entry(STU stu[]);//学生信息的录入
void infor_show(LIST*head);//利用链表对学生信息进行输出
void S_sort(STU s[],int flag);//利用结构体进行排序
LIST *Delet_infor(char*st,LIST *ht,int flag);//学生记录的删除
void Show_infor(char *S_s,LIST*h,int flag);//学生信息的查询
int Elect_les(STU lesson[]);//学生选课
LIST* Insert_infor(LIST *in_infor );//学生信息的添加
int main ()
{
printf("\t\t\t欢迎进入学生信息管理系统 用户名:admin,密码:123456 \n");
system("color 9");
int choice;//输入你的选择
char user[23];//输入用户名
char key[20];//输入密码
STU stu[M];//结构体数组
LIST *head;//链表的头结点
head=Creat_List(stu);
printf("请输入用户名:\n");
scanf("%s",user);
printf("请输入密码:\n");
scanf("%s",key);
printf("********************************\n");
printf("* 1---信息录入 *\n");
printf("* 2---信息排序 *\n");
printf("* 3---信息修改 *\n");
printf("* 4---信息删除 *\n");
printf("* 5---信息查询 *\n");
printf("* 6---信息输出 *\n");
printf("* 7---学生选课 *\n");
printf("* 0---退出程序 *\n");
printf("********************************\n");
if(strcmp(user,"admin")==0&&strcmp(key,"123456")==0)
{
printf("请输入你的选择:\n");
while(scanf("%d",&choice)!=EOF)
{
system("cls");
printf("********************************\n");
printf("* 1---信息录入 *\n");
printf("* 2---信息排序 *\n");
printf("* 3---信息修改 *\n");
printf("* 4---信息删除 *\n");
printf("* 5---信息查询 *\n");
printf("* 6---信息输出 *\n");
printf("* 7---学生选课 *\n");
printf("* 0---退出程序 *\n");
printf("********************************\n");
switch(choice)
{
case 1:{
printf("请录入学生的信息:\n");
if(Stu_Entry(stu))
{
system("cls");
printf("信息录入完成\n");
printf("********************************\n");
printf("* 1---信息录入 *\n");
printf("* 2---信息排序 *\n");
printf("* 3---信息添加 *\n");
printf("* 4---信息删除 *\n");
printf("* 5---信息查询 *\n");
printf("* 6---信息输出 *\n");
printf("* 7---学生选课 *\n");
printf("* 0---退出程序 *\n");
printf("********************************\n");
getchar();
}
else
printf("信息录入失败\n");
system("pause");break;
}
case 2:{
int choice;
printf("请输入排序的方式(1-学号排序 2-电话号码排序)\n");
scanf("%d",&choice);
printf("信息排序的结果为:\n");
S_sort(stu,choice);
system("pause");break;
system("pause");break;
case 4:{
printf("学生信息的删除:\n");
LIST *q;
char id[20];
char name[20];
int choice;
printf("请输入查询方式(1-学号查询 2-姓名查询):\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
{
printf("请输入要删除信息学生的学号:\n");
scanf("%s",id);
q=Delet_infor(id,Creat_List(stu),1);
if(q==NULL)
printf("信息删除失败\n");
else
{
printf("信息删除后的结果为:\n");
infor_show(q);
}
break;
}
case 2:{
printf("请输入要删除信息学生的姓名:\n");
scanf("%s",name);
printf("信息删除后的结果为:\n");
if(q==NULL)
printf("信息删除失败!\n");
else
{
printf("信息删除后的结果为:\n");
q=Delet_infor(name,Creat_List(stu),2);
}
infor_show(q);
break;
}
}
system("pause");break;
}
case 5:{
char id[20];
char name[20];
int choice;
printf("请输入查询方式(1-学号查询 2-姓名查询):\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
{ printf("请输入要查询学生的学号:\n");
scanf("%s",id);
Show_infor(id,Creat_List(stu),choice);
break;
}
case 2:{
printf("请输入要查询学生的姓名:\n");
scanf("%s",name);
Show_infor(id,Creat_List(stu),choice);
break;
}
}
system("pause");break;
}
case 6: {
printf("学生信息的输出结果为:\n");
infor_show(Creat_List(stu));
system("pause");break;
}
case 7:{ system("cls");
printf("请输入选修课程中的四门课程:\n");
if( Elect_les(stu))
{
system("cls");
printf("学生选课成功!\n");
printf("********************************\n");
printf("* 1---信息录入 *\n");
printf("* 2---信息排序 *\n");
printf("* 3---信息修改 *\n");
printf("* 4---信息删除 *\n");
printf("* 5---信息查询 *\n");
printf("* 6---信息输出 *\n");
printf("* 7---学生选课 *\n");
printf("* 0---退出程序 *\n");
printf("********************************\n");
getchar();
}
else
printf("学生选课失败!\n");
break;
}
case 0: {
printf("系统已经安全退出!!!");
exit(0);
system("pause");
break;
}
default:{
printf("输入的选择有误,请重新输入你的选择:\n");
system("pause");break;
}
}
printf("可以选择继续录入也可以按ctrl+z退出\n");
}
}
}else
{
system("cls");
printf("输入用户名或者密码错误,请退出后重新输入!\n");
}
}
LIST *Creat_List(STU *s)//PS:链表的建立
{
//尾插法进行建立链表
LIST *h,*p;
LIST *tail;
int i;
h=(LIST*)(malloc)(sizeof(LIST));
if(h==NULL)
return h;
else
tail=h;
for(i=0;i<M;i++)
{
p=(LIST*)malloc(sizeof(LIST));
if(p==NULL)
return NULL;
else
{
p->data=s[i];
tail->next=p;
tail=p;
tail->next=NULL;
}
}
return h;
}
int Stu_Entry(STU stu[M])//PS:学生信息录入函数的封装
{
int i;
for(i=0;i<M;i++)
{
printf("输入第%d个学生学号 姓名 性别 手机号码 班级: \n", i + 1);
scanf("%s %s %s %s %d", stu[i].id, stu[i].name, stu[i].sex,
&stu[i].tel, &stu[i].cla);
}
if(i==M)
return 1;
else
return 0;
}
void S_sort(STU s[],int flag)//PS:信息的排序函数的封装 利用结构体
{
int i,j;
int k;
STU t;
if(flag==1)
{
for(i=0;i<M-1;i++)//选择排序
{ k=i;
for(j=i;j<M;j++)
if(s[k].id<s[j].id)
k=j;
if(k!=i)
{
t=s[k];
s[k]=s[i];
s[i]=t;
}
}
}
if(flag==2)
{
for(i=0;i<M-1;i++)//选择排序
{ k=i;
for(j=i;j<M;j++)
if(s[k].tel<s[j].tel)
k=j;
if(k!=i)
{
t=s[k];
s[k]=s[i];
s[i]=t;
}
}
}
}
LIST* Delet_infor(char *st,LIST *ht,int flag)//PS:学生信息删除函数的封装
{
LIST*p;
LIST*tem;
p=ht->next;
if(p==NULL)
{
printf("链表错误!\n");
return NULL;
}
else
{
while(p!=NULL)
{
if(strcmp(p->data.id,st)==0&&flag==1)
{
tem=p;
break;
}
if(strcmp(p->data.name,st)==0&&flag==2)
{
tem=p;
break;
}
p=p->next;
}
while(strcmp(p->data.id,st)!=0&& p->next!=NULL)//PS:循环查找要删除的节点
{
tem=p;
p=p->next;
}
if( strcmp(p->data.id,st)==0)//找到了一个节点的num和num相等
{
if(p == ht->next)//找到的节点是头节点后面的一个节点
{
ht->next= p->next;
}
else
{
tem->next=p->next;
}
return ht;
}
else
return ht=NULL;
}
}
void infor_show(LIST*h)//PS:学生信息全部输出函数的封装
{
LIST *p;
int i;
p=h->next;
if(p==NULL)
printf("链表发生错误!!!\n");
else
{
while(p!=NULL)
{ printf("学号%s的学生信息:\n",p->data.id);
printf("姓名:%s 性别:%s 手机号码:%s 班级:%d\n",p->data.name,p->data.sex,p->data.tel,p->data.cla);
printf("该学生的选择的选修课为:\n");
for(i=0;i<N;i++)
printf("%s\t",p->data.stu_lesson[i]);
p=p->next;
printf("\n");
}
}
}
void Show_infor(char *S_s,LIST*h,int flag)//PS:信息查询输出函数的封装
{
LIST*p;
p=h->next;
int i;
if(p==NULL)
printf("链表出现错误!!!\n");
else
{
while(p!=NULL)
{
if(strcmp(p->data.id,S_s)==0&&flag==1)
break;
if(strcmp(p->data.id,S_s)==0&&flag==2)
break;
p=p->next;
}
printf("学生的姓名 性别 手机号码 班级\n");
printf("%s %s %s %d\n",p->data.name,p->data.sex,p->data.tel,p->data.cla);
printf("该学生的选择的选修课为:\n");
for(i=0;i<N;i++)
printf("%s\t",p->data.stu_lesson[i]);
}
}
int Elect_les(STU lesson[])//PS:选修课的录入
{
int i,j;
printf("*******************************\n");
printf("* 1---语言文学 *\n");
printf("* 2---人文地理 *\n");
printf("* 3---思想政治 *\n");
printf("* 4---口才艺术 *\n");
printf("* 5---经济管理 *\n");
printf("* 6---国际贸易 *\n");
printf("* 7---职场礼仪 *\n");
printf("*******************************\n");
for(i=0;i<M;i++)
{
printf("请输入第%d位学生的选修的课程:\n",i+1);
for(j=0;j<N;j++)
{
scanf("%s",lesson[i].stu_lesson[j]);
}
}
if(i==M)
return 1;
else
return 0;
}
LIST* Insert_infor(LIST *in_infor)//PS:学生信息添加函数的封装
{
LIST *p;
LIST *st;
LIST *q;
int s=0;
double ave=0;
st=in_infor->next;
p=(LIST*)malloc(sizeof (LIST));
printf("请输入要填加的学生的学号 姓名 性别 手机号码 班级:\n");
scanf("%s %s %s %s %d", p->data.id, p->data.name, p->data.sex,
p->data.tel,&p->data.cla);
if(st==NULL)
{
printf("链表发生错误!\n");
return NULL;
}
else
{
q=in_infor;
while(q->next!=st)
q=q->next;
q->next=p;
p->next=st;
return in_infor;
}
}