c 语言 一个学生信息管理系统
#include<stdio.h>#include<string.h>
typedef struct student
{
char number[10],name[10],易做图[10];
int age;
float score[4]; //数组中的数据依次为c语言、思科、windows成绩
struct student *next; } st;
st *head;
char sa[10];
void jiemian()
{
printf("\t ╭═══════════════╮\n");
printf("\t ║ 学生管理系统 ║\n");
printf("\t ╭══════┤ 湖南科技学院 ├══════╮\n");
printf("\t ║ ║ 网络安全 3091班 ║ ║\n");
printf("\t ║ ║ 廖凯 制作 ║ ║\n");
printf("\t ║ ╰═══════════════╯ ║\n");
printf("\t ║ ║\n");
printf("\t ║ 1.添加{学生信息} 2.删除{学生信息} ║\n");
printf("\t ║ 3.修改{学生信息} 4.查看{学生信息} ║\n");
printf("\t ║ 5.排序{学生信息} 0.退出系统 ║\n");
printf("\t ║ ║\n");
printf("\t ║ QQ:77192357 E-MAIL:77192357@QQ.COM ║\n");
printf("\t ║ ╭───────────────────────╮ ║\n");
printf("\t ╰══┤ ★★★★★★★★★★★★★★★★★★★★★★ ├══╯\n");
printf("\t ╰───────────────────────╯\n");
}
void tianjia(st *p) //接收链表数据的头指针
{
st *p1=head;
if(head==NULL) //判断链表的第一个结点是否为空
{
printf("\n请输入学号: ");
scanf("%s",p->number);
printf("\n请输入姓名: ");
scanf("%s",p->name);
printf("\n请输入性别: ");
scanf("%s",p->易做图);
printf("\n请输入年龄");
scanf("%d",p->age);
printf("\nC语言成绩: ");
scanf("%f",p->score[0]);
printf("\n思科成绩: ");
scanf("%f",p->score[1]);
printf("\nwindows成绩: ");
scanf("%f",p->score[2]);
p->score[3]=(p->score[0]+p->score[1]+p->score[2])/3.0;
p->next=NULL; }
else{
while(p->next!=NULL); //找到链个最后一个结点
{ p++; p1++;}
p++;
printf("\n请输入学号: ");
scanf("%s",p->number);
printf("\n请输入姓名: ");
scanf("%s",p->name);
printf("\n请输入性别: ");
scanf("%s",p->易做图);
printf("\n请输入年龄");
scanf("%d",p->age);
printf("\nC语言成绩: ");
scanf("%f",p->score[0]);
printf("\n思科成绩: ");
scanf("%f",p->score[1]);
printf("\nwindows成绩: ");
scanf("%f",p->score[2]);
p1->next=p;
p->next=NULL; }
}
void shanchu(st *p)
{ char ch[10],c;
st *q1,*q2;
int a,i=0; //i用于判断是否找到了
do{ p=q1=q2=head;
printf("----------------------------------------------\n");
printf("-------- 欢迎进入删除用户信息窗口 --------\n");
printf("----------------------------------------------\n\n\n");
printf("1、输入学号删除用户信息 \n 0、退出\n");
scanf("%d",&a);
switch(a)
{case 1:
{ printf("请输入学号: ");
scanf("%s",ch);
if(p->next==NULL) printf("没有数据 可删除");
q2++;
while(p->next!=NULL)
{ if(strcmp(ch,p->number)==0) //在链个中找相等的学号
{ printf("\t==================================\n");
printf("\t============== 警告 ============\n");
printf("\t== 确定要删除此用户信息(y/n): ==\n");
printf("\t==================================\n");
scanf("%c",&c);
if('y'==c) //确认是否要删除
{
if(p==head) //判断是否是第一个结点
if(p->next==NULL) head=NULL; //判断是否只有一个结点
else { head=q2; break;} //head=q2->number
else
{
if(p->next!=NULL) q1->next=q2; //判断此结点后是否还有结点 //q1->next=q2->number
else q1->next=NULL; }
printf("\n\n\n\n\n\n\t----------------");
printf("\t 结点已删除 ");
printf("\t----------------");
}
i=1; }
q1=p++;q2++;
} if(i==0) printf(" 链个中没有此学号的学生信息 "); break; }
case 0: return ; break; } //return(1);
}while(1);
}
void xg(st *p)
{
printf("----------------------------------\n");
printf("-------- 用户信息修改 --------\n");
printf("----------------------------------\n\n\n");
printf("请输入学号: ");
scanf("%s",sa);
while(p->next!=NULL)
{
if(strcmp(sa,p->number)==0)
{ printf("\n姓名: "); scanf("%s",p->name);
printf("\n性别: "); scanf("%s",p->易做图);
printf("c语言: "); scanf("%f",p->score[0]);
printf("思科: "); scanf("%f",p->score[1]);
printf("windows: "); scanf("%f",p->score[2]);
}
p++; }
}
void xiugai(st *p)
{ int a;
do{
printf("----------------------------------------------\n");
printf("-------- 欢迎进入修改用户信息窗口 --------\n");
printf("----------------------------------------------\n\n\n");
printf("1、输入学号修改用户信息\n0、退出修改\n");
scanf("%d",&a);
switch(a)
{ case 1: xg(p); break;
case 0: return ; break; // return(0);
default: printf("您的输入有误 请重新输入:\n\n\n"); continue;
}
}while(1);
}
void nan(st *p)
{ int i=0;
printf("__________________________________________________________________\n");
while(p->next!=NULL)
if(strcmp("nan",p->易做图)==0)
{
printf("|%-5s|%-5s|%-5s|%-5d|%5.3f|%5.3f|%5.3f|%5,3f",p->number,p->name,p->易做图,p->age,p->score[0],p->score[1],p->score[2],p->score[3]);
printf("_______________________________________________________________\n");
i=1; }
if(i==0) printf("此班没有男生");
}
void nv(st *p)
{ int i=0;
printf("__________________________________________________________________\n");
while(p->next!=NULL)
if(strcmp("nan",p->易做图)==0)
{
printf("|%-5s|%-5s|%-5s|%-5d|%5.3f|%5.3f|%5.3f|%5,3f",p->number,p->name,p->易做图,p->age,p->score[0],p->score[1],p->score[2],p->score[3]);
printf("_______________________________________________________________\n");
i=1; }
if(i==0) printf("此班没有女生");
}
void all(st *p)
{
printf("__________________________________________________________________\n");
while(p->next!=NULL)
{ printf("|%-5s|%-5s|%-5s|%-5d|%5.3f|%5.3f|%5.3f|%5,3f",p->number,p->name,p->易做图,p->age,p->score[0],p->score[1],p->score[2],p->score[3]);
printf("_______________________________________________________________\n");
}
}
void chakan(st *s)
{
int a;
printf("\n\n\n\t----------------------------------------------\n");
printf("\t-------- 欢迎进入查看用户信息窗口 --------\n");
printf("\t----------------------------------------------\n\n\n");
printf("1、查询所有的男同学信息\n2、查询所有的女同学信息\n3、查看所有的同学信息\n0、退出查询\n ");
scanf("%d",&a);
switch(a)
{ case 1: nan(s);break;
case 2: nv(s);break;
case 3: all(s);break;
case 0: return ; break; // return(1);
}
}
void chengxu(st *p)
{
int a;
jiemian();
printf("\n\n\n\n请输入操作数: ");
do{
scanf("%d",&a);
switch(a)
{
case 1: tianjia(p);break;
case 2: shanchu(p);break;
case 3: xiugai(p);break;
case 4: chakan(p);break;
// case 5: paixu(p);break;
case 0: return ; break; // return(1);
default: printf("\n您的输入有误 请重新输入:"); continue; }
jiemian();
printf("\n\n\n\n请输入操作数: ");
}while(1);
}
int main()
{
char zf[10];
int i=0;
head=(st*)malloc(sizeof(st)); head=NULL;
printf("\n\n\n\t欢迎进入用户登录界面");
printf("\n\t请输入密码:");
do{
scanf("%s",zf);
if(strcmp("liaokai",zf)==0)
{ system("cls"); chengxu(head); break;}
else
{ ++i; printf("您的输入有误 请重新输入:"); } //三次输入错误 程序退出
}while(i<3);
}
运行打包好的exe 文件 就出现
( 排序我还没搞) 高手的 帮忙调试 修改一下啊。 谢谢