学生信息管理系统c语言(用C语言编程学生信息管理系统!)

本文目录
用C语言编程学生信息管理系统!
/*【学生管理系统】*/
//modify
#include《stdio.h》
#include《string.h》
#include《conio.h》
#include《stdlib.h》
#include《time.h》
#define N 100
typedef struct student
{
int num; //学号,姓名,年龄,性别,出生年月,地址,电话,
char name;
char sex;
int age;
int y,m;
int tel;
char add;
char mail;
int res;
int stu;
} SDate;
int PassWord();
void Menu();
int Input_Choice(); //函数声明
void Info_Paixu(SDate *student,int n);
void Info_print(SDate *stu,int n);
int Input_file(SDate *stu1);
int Info_Input(SDate *stu,int count);
void Info_Seach(SDate *stu,int n);
void Info_Change(SDate *stu,int n,int Num);
void Exit();
void Print_file(SDate *stu,int n);
int Info_Del(SDate *stu, int n, int del);
void Info_Change(SDate *stu, int res, int choice);
int Info_Add(SDate *stu, int count);
int main()
{
SDate stu;
int ret=0,res=0,choice=0;
char ch;
loop:
ret=PassWord(); //登录函数 默认密码为admin
if(!ret)
{
system("cls");
printf("\n\t\t密码错误或验证码错误!\n"); //默认密码:admin
system("pause");
system("cls");
goto loop;
}
system("cls");
e:
Menu(); //菜单显示函数
printf("你的选择是?\n");
scanf("%d",&ret);
switch(ret)
{
case 1:
choice=Input_Choice(); //InputChoice()数据输入方式选择函数
if(choice==1)
res=Info_Input(stu,res); //键盘输入函数
else if(choice==2)
res=Input_file(stu); //文件读取函数
else
{
system("cls");
goto e;
}
break;
case 2:
if(res==0)
{
system("cls");
printf("没有数据输入,请重新选择!\n");
goto e;
}
else
Info_print(stu,res);
break;
case 3:
if(res==0||res==1)
{
system("cls");
printf("没有需要排序数据,请重新选择!\n");
goto e;
}
else
Info_Paixu(stu,res);
break;
case 4:
Info_Seach(stu,res);
break;
case 5:
res=Info_Add(stu,res);
break;
case 6:
Info_print(stu,res);
printf("输入学号进行删除:");
scanf("%d",&choice);
res=Info_Del(stu, res, choice);
break;
case 7:
printf("请输入需要修改的学号:");
scanf("%d",&choice);
Info_Change(stu,res,choice);
break;
case 8:
Print_file(stu, res);
break;
case 9:
Exit();
break;
default :
printf("您的选泽有误!\n");
}
getchar();
printf("返回主菜单重新选择y/n?");
scanf("%c",&ch);
if(ch==’Y’||ch==’y’)
{
system("cls");
goto e;
}
return 0;
}
int yanzheng() //验证码模块
{
int a,b,c,d;
srand((unsigned)time(NULL));
a=rand()%100;
b=rand()%100;
c=a+b;
printf("\n\t **************************\n");
printf("\t\t验证码: %d+%d=?\n",a,b);
printf("\t\t 答案为:");
scanf("%d",&d);
if(c==d)
return 1;
else
return 0;
}
int PassWord() //登录模块
{
int i=0;
char passWord;
char p="admin"; //默认密码设置
char ch;
printf("\t 欢迎使用学生信息管理系统\n");
printf("\n");
printf("\t\t用户名:Admin\n");
printf("\n");
printf("\t\t密码:");
while((ch=getch())!=13)
{
putchar(’*’);
passWord=ch;
i++;
}
passWord=’\0’;
if(strcmp(p,passWord)==0)
yanzheng();
else
return 0;
}
void Menu() //菜单模块
{
printf("\t 欢迎使用学生信息管理系统\n");
printf("\n*******************************************\n");
printf("** \t\t1、学生信息录入\t\t **\n");
printf("** \t\t2、学生信息浏览\t\t **\n");
printf("** \t\t3、学生信息排序\t\t **\n");
printf("** \t\t4、学生信息查找\t\t **\n");
printf("** \t\t5、学生信息添加\t\t **\n");
printf("** \t\t6、学生信息删除\t\t **\n");
printf("** \t\t7、学生信息修改\t\t **\n");
printf("** \t\t8、学生信息保存\t\t **\n");
printf("**\t\t9、退出\t\t\t **\n");
printf("*******************************************\n");
}
int Input_Choice() //数据输入方式选择
{
int i;
system("cls");
printf("\t 欢迎使用学生信息管理系统\n");
printf("\t\t1、键盘录入\n");
printf("\t\t2、文件读取\n");
printf("\t\t0、返回\n");
printf("\t你的选择是?");
scanf("%d",&i);
return i;
}
int Info_Input(SDate *stu,int count) //信息从键盘输入模块
{
SDate *p;
p=stu;
system("cls");
printf("请输入第%d个学生学号(输入0结束):\n",count+1);
scanf("%d",&p-》num);
while(p-》num!=0)
{
printf("请输入该学生姓名:\n");
scanf("%s",p-》name);
printf("请输入该学生年龄:\n");
scanf("%d",&p-》age);
getchar();
printf("请输入该学生性别:\n");
scanf("%c",&p-》sex);
printf("请输入该学生出生年月:\n");
scanf("%d%d",&p-》y,&p-》m);
printf("请输入该学生住址:\n");
scanf("%s",p-》add);
printf("请输入该学生联系电话:\n");
scanf("%d",&p-》tel);
printf("请输入该学生E-Mail:\n");
scanf("%s",p-》mail);
count++;
p++;
system("cls");
printf("请输入第%d个学生学号(输入0结束):\n",count);
scanf("%d",&p-》num);
}
return count;
}
int Input_file(SDate *stu1) //信息从文件输入模块
{
int rin=0;
SDate *p;
FILE *fp;
p=stu1;
if((fp=fopen("StuInfo.txt","r"))==NULL)
printf("该文件不存在!\n");
while(!feof(fp))
{
fscanf(fp,"%d %s %c %d %d %d %d %s %s\n",&p-》num,p-》name,&p-》sex,&p-》age,&p-》y,&p-》m,&p-》tel,p-》add,p-》mail);
p++;
rin++;
}
fclose(fp);
printf("文件读取成功!\n");
return rin;
}
void Info_print(SDate *stu,int n) //信息输出至屏幕模块
{
SDate *p;
if(n==0) //学号,姓名,年龄,性别,出生年月,地址,电话,
printf("没有录入信息!\n");
else
{
printf("\n以下是%d个同学的信息\n",n);
printf("学号 姓名 性别 年龄 出生年月 电话 地址 E-Mail\n");
for(p=stu; p《stu+n; p++)
printf("%d %s %c %d %d-%d %d %s %s\n",p-》num,p-》name,p-》sex,p-》age,p-》y,p-》m,p-》tel,p-》add,p-》mail);
}
}
void Print_file(SDate *stu,int n) //信息保存至文件模块
{
FILE *fp;
SDate *p;
p=stu;
if((fp=fopen("StuInfo.txt","a"))==NULL)
printf("文件读取失败!\n");
else
{
for(; p《stu+n; p++)
fprintf(fp,"%d %s %c %d %d %d %d %s %s\n",p-》num,p-》name,p-》sex,p-》age,p-》y,p-》m,p-》tel,p-》add,p-》mail);
fclose(fp);
printf("\n保存成功!\n");
}
}
void Info_Paixu(SDate *stu,int n) //学号排序模块
{
int i,j;
SDate p;
for(i=0; i《n-1; i++)
{
for(j=0; j《n-1-i; j++)
{
if((stu.num))
{
p=stu;
stu;
stu=p;
}
}
}
printf("排序完成!\n");
}
void Exit() //退出模块
{
printf("谢谢使用!\n");
exit(1);
}
void Info_Seach(SDate *stu,int n) //查询模块,目前仅支持学号或姓名的精准查询
{
int num,choice;
char name;
int flag=-1,i;
system("cls");
printf("请输入查询方式:\t1、学号查询\n\t \t2、名字查询\n");
printf("您的选择是?");
scanf("%d",&choice);
if(choice==1)
{
lab1:
printf("请输入需要查找的学号:\n");
scanf("%d",#);
for(i=0; i《n; i++)
{
if(num==stu.num)
{
flag=i;
printf("%d %s %c %d %d-%d %d %s %s\n",stu.mail);
}
}
if(flag==-1)
{
printf("未找到!请重新选择\n");
printf("1、返回继续查询\n2、退出查询,返回主菜单\n3、退出程序你的选择是?");
scanf("%d",&choice);
if(choice==1)
{
system("cls");
goto lab1;
}
if(choice==2)
goto end;
else
Exit();
}
}
else if(choice==2)
{
lab2:
printf("请输入需要查找的姓名:\n");
scanf("%s",name);
for(i=0; i《n; i++)
if(strcmp(name,stu.name)==0)
{
flag=i;
printf("%d %s %c %d %d-%d %d %s %s\n",stu.mail);
}
if(flag==-1)
{
printf("您的输入有误!请重新选择\n");
printf("\t\t1、返回继续查询\n\t\t2、退出查询,返回主菜单\n\t\t3、退出程序\t\t\n你的选择是?");
scanf("%d",&choice);
if(choice==1)
{
system("cls");
goto lab2;
}
if(choice==2)
goto end;
else
Exit();
}
}
end:
;
}
void Info_Change(SDate *stu,int n,int Num) //信息修改模块
{
int i;
for(i=0; i《n; i++)
if(stu.num==Num)
{
printf("请输入该学生姓名:\n");
scanf("%s",stu.name);
printf("请输入该学生年龄:\n");
scanf("%d",&stu.age);
getchar();
printf("请输入该学生性别:\n");
scanf("%c",&stu.sex);
printf("请输入该学生出生年月:\n");
scanf("%d%d",&stu.m);
printf("请输入该学生住址:\n");
scanf("%s",stu.add);
printf("请输入该学生联系电话:\n");
scanf("%d",&stu.tel);
printf("请输入该学生E-Mail:\n");
scanf("%s",stu.mail);
printf("学号为%d的同学信息修改完成!\n",Num);
}
}
int Info_Del(SDate *stu, int n, int del) //信息删除模块
{
int i,j;
for(i=0; i《n; i++)
if(stu.num==del)
for(j=i; j《n-1; j++)
stu;
n--;
printf("删除成功!\n");
return n;
}
int Info_Add(SDate *stu,int count) //信息添加模块
{
SDate *p;
system("cls");
printf("当前共有%d个数据\n",count+1);
p=stu+(count);
printf("请输入第%d个学生学号(输入0结束):\n",count+1);
scanf("%d",&p-》num);
while(p-》num!=0)
{
printf("请输入该学生姓名:\n");
scanf("%s",p-》name);
printf("请输入该学生年龄:\n");
scanf("%d",&p-》age);
getchar();
printf("请输入该学生性别:\n");
scanf("%c",&p-》sex);
printf("请输入该学生出生年月:\n");
scanf("%d%d",&p-》y,&p-》m);
printf("请输入该学生住址:\n");
scanf("%s",p-》add);
printf("请输入该学生联系电话:\n");
scanf("%d",&p-》tel);
printf("请输入该学生E-Mail:\n");
scanf("%s",p-》mail);
count++;
p++;
system("cls");
printf("请输入第%d个学生学号(输入0结束):\n",count+1);
scanf("%d",&p-》num);
}
return count;
}
用c语言编写学生信息管理系统
#include《stdio.h》
#include《stdlib.h》
#include《string.h》
#include《conio.h》
#define N 200
int input(struct Student stu);
void save(struct Student stu,int n);
int load(struct Student stu);
void output(struct Student stu,int n);
int insert(struct Student stu_save,int n);
void sort(struct Student stu_save,int n);
void find(struct Student stu_save,int n);
int delete_stu(struct Student stu_save,int n);
typedef struct Student
{
char num;
char name;
char sex;
int age;
float score;
float tolscore;
float ave;
}STU;
int main()
{
int total=0,a;
STU stu;
printf("☆☆☆☆☆学籍管理系统☆☆☆☆☆\n\n");
do{
printf("\n**********************************\n");
printf("1-导入学生信息\n2-加载学生信息\n3-保存学生信息\n4-按学号插入学生\n5-给学生排序\n6-查找学生\n7-删除学生\n8-输出当前学生数据\n9-退出\n");
printf("**********************************\n");
printf("请按键选择:");
scanf("%d",&a);
switch(a)
{
case 1:
total=input(stu);
break;
case 2: total=load(stu);break;
case 3:save(stu,total);break;
case 4: total+=insert(stu,total);break;
case 5:sort(stu,total);break;
case 6:find(stu,total);break;
case 7:total-=delete_stu(stu,total);break;
case 8:output(stu,total);break;
case 9:exit(0);break;
default:printf("输入错误,请重新输入!\n");break;
}
//system("cls");
}while(1);
}
int input(struct Student stu)
{
int i,j,n;
float sum;
printf("请输入要导入的学生人数\n");
scanf("%d",&n);
printf("请输入学生的学号、姓名、性别、年龄及三门课成绩\n");
for(i=0;i《n;i++)
{
scanf("%s",stu.num);
scanf("%s",stu.name);
scanf(" %c",&stu.sex); //%c前的空格用于接收上一个字符串后的空格、回车、制表符,etc
scanf("%d",&stu.age);
sum=0;
for(j=0;j《3;j++)
{
scanf("%f",&stu);
sum+=stu;
}
stu.tolscore=sum;
stu.ave=sum/3.0f;
}
return (n);
}
void save(struct Student stu,int n)
{
FILE *fp;
int i;
char filename;
printf("请输入文件名:");
scanf("%s",filename);
if(strchr(filename,’.’)==NULL)
strcat(filename,".dat");
if((fp=fopen(filename,"wb"))==NULL)
{
printf("Cannot open this file\n");
system("pause");
return;
}
fwrite(&n,sizeof(int),1,fp);
for(i=0;i《n;i++)
fwrite(&stu,sizeof(struct Student),1,fp);
fclose(fp);
printf("保存成功!");
system("pause");
return;
}
int load(struct Student stu_save)
{
FILE *fp;
int i,n;
char filename;
printf("请输入要加载的文件名: ");
//getchar();
scanf("%s",filename);
// gets(filename);
if(strchr(filename,’.’)==NULL)
strcat(filename,".dat");
if((fp=fopen(filename,"rb"))==NULL)
{
printf("Cannot open this file\n");
system("pause");
return 0;
}
fread(&n,sizeof(int),1,fp);
for(i=0;i《n;i++)
fread(&stu_save,sizeof(struct Student),1,fp);
fclose(fp);
system("cls");
printf("文件加载成功!数据如下");
output(stu_save,n);
return n;
}
void output(struct Student stu_save,int n)
{
int i,j;
// system("cls");
printf("\n学号\t姓名\t性别\t年龄\t成绩一\t成绩二\t成绩三\t总分\t平均分\n");
for(i=0;i《n;i++)
{
printf("%s\t",stu_save.num);
printf("%s\t",stu_save.name);
printf("%c\t",stu_save.sex);
printf("%d\t",stu_save.age);
for(j=0;j《3;j++)
printf("%g\t",stu_save);
printf("%g\t",stu_save.tolscore);
printf("%.2f",stu_save.ave);
putchar(10);
}
system("pause");
return;
}
int insert(struct Student stu_save,int n)
{
int i,j,num=0;
float sum=0;
struct Student s;
char flag;
if(n》200)
{
printf("空间已满,无法插入!\n");
return 0;
}
// load(stu_save,n-1);
do{
printf("\n请依次输入学号、姓名、性别、年龄及三门课成绩\n");
scanf("%s",s.num);
scanf("%s",s.name);
scanf(" %c",&s.sex); //%c前的空格用于接收上一个字符串后的空格、回车、制表符,etc
scanf("%d",&s.age);
for(j=0;j《3;j++)
scanf("%f",&s.score);
sum=0;
for(j=0;j《3;j++)
sum+=s.score;
s.tolscore=sum;
s.ave=sum/3;
num++;
for(i=n+num-1;strcmp(stu_save.num,s.num)》0&&i》0;i--)
stu_save;
stu_save=s;
printf("插入成功!");
fflush(stdin);
do
{
printf("继续插入?(y/n)");
flag=getch();
}while(flag!=’y’&&flag!=’n’);
}while(flag==’y’);
system("pause");
//save(stu_save,n);
return num;
}
void sort(struct Student stu_save,int n)
{
int a,i,j;
struct Student t;
system("cls");
printf("\n1-按序号排序\n2-按成绩排序\n请选择:");
scanf("%d",&a);
while(a!=1&&a!=2)
{
printf("输入有误,请重新输入!\n");
scanf("%d",&a);
}
//load(stu_save,n);
if(a==1)
{
for(i=0;i《n-1;i++)
for(j=0;j《n-i-1;j++)
{
if(strcmp(stu_save.num)》0)
{
t=stu_save;
stu_save;
stu_save=t;
}
}
}
else
{
for(i=0;i《n-1;i++)
for(j=0;j《n-i-1;j++)
{
if(stu_save.ave)
{
t=stu_save;
stu_save;
stu_save=t;
}
}
}
// save(stu_save,n);
printf("排序成功!\n");
output(stu_save,n);
return;
}
void find(struct Student stu_save,int n)
{
char ch;
do{
int i,j,w=1;
char search;
//load(stu_save,n);
printf("请输入学生的学号或姓名");
scanf("%s",search);
for(i=0;i《n;i++)
{
if(strcmp(stu_save.name,search)==0)
{
printf("查找成功,该学生的信息为:\n");
printf("%s\t",stu_save.num);
printf("%s\t",stu_save.name);
printf("%c\t",stu_save.sex);
printf("%d\t",stu_save.age);
for(j=0;j《3;j++)
printf("%g\t",stu_save);
printf("%g\t",stu_save.tolscore);
printf("%.2f",stu_save.ave);
putchar(10);
w=0;
break;
}
}
if(w)
printf("查找失败\n");
do
{
printf("\n按Y继续查找,按N返回上级菜单\n");
ch=getch();
}while(ch!=’y’&&ch!=’n’);
if(ch==’n’)
return;
}while(ch==’y’);
}
int delete_stu(struct Student stu_save,int n)
{
int i,w=1;
char search;
// load(stu_save,n);
printf("\n请输入要删除学生的姓名或学号\n");
scanf("%s",search);
for(i=0;i《n;i++)
if(strcmp(stu_save.name,search)==0)
{
w=0;
break;
}
if(w)
{
printf("无此学生!\n");
return 0;
}
for(;i《n-1;i++)
stu_save;
printf("删除成功!\n");
// save(stu_save,n-1);
return 1;
}
之前随便写的 忘了有没有调试 有问题再私信找我 采纳哦~~
学生信息管理系统C语言编程
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define N 3
typedef struct z1
{
char no;
char name;
int score;
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
STUDENT *init();
STUDENT *create();
STUDENT *del(STUDENT *h);
void print(STUDENT *h);
void search1(STUDENT *h);
void search3(STUDENT *h);
STUDENT *insert(STUDENT *h);
void sort(STUDENT *h);
void save(STUDENT *h);
void tongji(STUDENT *h);
int menu_select();
STUDENT *load();
void inputs(char *prompt,char *s,int count);
STUDENT *load();
main()
{
int i;
STUDENT *head;
head=init();
for(;;)
{
switch(menu_select())
{
case 0:head=init();break;
case 1:head=create();break;
case 2:head=insert(head);break;
case 3:save(head);break;
case 4:print(head);break;
case 5:search1(head);break;
case 6:head=del(head);break;
case 7:sort(head);break;
case 8:tongji(head);break;
case 9:search3(head);break;
case 10:exit(0);
}
}
}
int menu_select()
{
char *menu={"************菜单************",
"0. 初始化链表",
"1. 输入学生成绩",
"2. 插入学生成绩",
"3. 保存学生记录",
"4. 显示学生记录",
"5. 按学号查找学生信息",
"6. 删除指定学号的学生信息",
"7. 按某一门课对学生成绩排序",
"8. 统计某门课程的学生成绩",
"9. 按姓名查找学生信息",
"10. 退出系统"};
char s;
int c,i;
for(i=0;i《=11;i++)
printf(" %s\n",menu);
do
{
printf("\n请选择0~10中的某一个选项\n");
scanf("%s",s);
c=atoi(s);
}while(c《0||c》10);
return c;
}
STUDENT *init()
{
return NULL;
}
STUDENT *create()
{
int i;int s;
STUDENT *h=NULL,*info;
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT));
if(!info)
{
printf("\n内存不足");
return NULL;
}
inputs("输入学号:",info-》no,11);
if(info-》no==’@’)break;
inputs("输入姓名:",info-》name,15);
printf("开始输入%d门课的成绩\n",N);
s=0;
for(i=0;i《N;i++)
{
do{
printf("第%d门分数:",i+1);
scanf("%d",&info-》score);
if(info-》score《0)
printf("输入成绩错误,请重新输入:\n");
}while(info-》score《0);
s=s+info-》score;
}
info-》sum=s;
info-》average=(float)s/N;
info-》order=0;
info-》next=h;
h=info;
}
return h;
}
void inputs(char *prompt,char *s,int count)
{
char p;
do
{
printf(prompt);
scanf("%s",p);
if(strlen(p)》count)
printf("\n太长了!\n");
}while(strlen(p)》count);
strcpy(s,p);
}
void print(STUDENT *h)
{
int i=0;
STUDENT *p;
p=h;
printf("\n\n\n***********************学生***********************\n");
printf("|序号|学号 | 姓名 | 语文 | 英语 |数学 | 总分 |平均分 |名次 |\n");
printf("|---|-------|--------|----|----|----|------|------|---|\n");
while(p!=NULL)
{
i++;
printf("|%3d |%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",i,p-》no,p-》name,p-》score,p-》sum,p-》average,p-》order);
p=p-》next;
}
printf("***********************end***********************\n");
}
STUDENT *del(STUDENT *h)
{
STUDENT *p,*q;
char s;
printf("请输入要删除的学生的学号\n");
scanf("%s",s);
q=p=h;
while(strcmp(p-》no,s)&&p!=NULL)
{
q=p;
p=p-》next;
}
if(p==NULL)
printf("\n链表中没有学号为%s的学生\n",s);
else
{
printf("\n\n\n***********************找到了***********************\n");
printf("|学号 | 姓名 | 语文 | 英语 | 数学 | 总分 | 平均分 | 名次 |\n");
printf("|----------|----------|----|----|----|------|------|---|\n");
printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p-》no,p-》name,p-》score,p-》sum,p-》average,p-》order);
printf("***********************end***********************\n");
printf("请按任意键删除\n");
getchar();
if(p==h)
h=p-》next;
else q-》next=p-》next;
free(p);
printf("\n已经删除学号为%s的学生\n",s);
printf("不要忘了保存数据\n");
}
return h;
}
void search1(STUDENT *h)
{
STUDENT *p;
char s;
printf("请输入你要查找的同学的学号\n");
scanf("%s",s);
p=h;
while(strcmp(p-》no,s)&&p!=NULL)
p=p-》next;
if(p==NULL)
printf("’n没有学号为%s的学生\n",s);
else
{
printf("\n\n\n***********************找到了***********************\n");
printf("|学号 | 姓名 | 语文 | 英语 | 数学 | 总分 | 平均分 | 名次 |\n");
printf("|----------|-----------|----|----|----|------|------|---|\n");
printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p-》no,p-》name,p-》score,p-》sum,p-》average,p-》order);
printf("***********************end***********************\n");
}
}
void search3(STUDENT *h)
{
STUDENT *p;
char s;
printf("请输入你要查找的同学的姓名\n");
scanf("%s",s);
p=h;
while(strcmp(p-》name,s)&&p!=NULL)
p=p-》next;
if(p==NULL)
printf("\n没有姓名为%s的学生\n",s);
else
{
printf("\n\n\n***********************找到了***********************\n");
printf("|学号 | 姓名 | 语文 | 英语 | 数学 | 总分 | 平均分 | 名次 |\n");
printf("|----------|-----------|----|----|----|------|------|---|\n");
printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p-》no,p-》name,p-》score,p-》sum,p-》average,p-》order);
printf("***********************end***********************\n");
}
}
STUDENT *insert(STUDENT *h)
{
STUDENT *p,*q,*info;
char s;
int s1,i;
printf("请输入插入点的学生学号\n");
scanf("%s",s);
printf("\n请输入新的学生信息\n");
info=(STUDENT *)malloc(sizeof(STUDENT));
if(!info)
{
printf("\n内存不足!");
return NULL;
}
inputs("输入学号:",info-》no,11);
inputs("输入姓名:",info-》name,15);
printf("请输入%d门课的分数\n",N);
s1=0;
for(i=0;i《N;i++)
{
do{
printf("分数%d",i+1);
scanf("%d",&info-》score);
if(info-》score《0)
printf("输入数据有误,请重新输入\n");
}while(info-》score《0);
s1=s1+info-》score;
}
info-》sum=s1;
info-》average=(float)s1/N;
info-》order=0;
info-》next=NULL;
p=h;
q=h;
while(strcmp(p-》no,s)&&p!=NULL)
{q=p;p=p-》next;}
if(p==NULL)
if(p==h)
h=info;
else q-》next=info;
else
if(p==h)
{
info-》next=p;
h=info;
}
else
{
info-》next=p;
q-》next=info;
}
printf("\n已经插入了%s这个学生\n",info-》name);
printf("----不要忘了存盘啊--\n");
return(h);
}
void save(STUDENT *h)
{
FILE *fp;
STUDENT *p;
char outfile;
printf("请输入保存文件的文件名,例如 c:\\f1\\te.txt:\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL)
{
printf("不能打开文件\n");
exit(1);
}
printf("\n正在保存......\n");
p=h;
while(p!=NULL)
{
fwrite(p,sizeof(STUDENT),1,fp);
p=p-》next;
}
fclose(fp);
printf("------保存成功!!!------\n");
}
void sort(STUDENT *h)
{
int i=0,j;
STUDENT *p,*q,*t,*h1;
printf("请输入要按哪门课程的编号来排序:(0.语文 1.数学 2.英语)\n");
scanf("%d",&j);
h1=h-》next;
h-》next=NULL;
while(h1!=NULL)
{
t=h1;
h1=h1-》next;
p=h;
q=h;
while(t-》score&&p!=NULL)
{
q=p;
p=p-》next;
}
if(p==q)
{
t-》next=p;
h=t;
}
else
{
t-》next=p;
q-》next=t;
}
}
p=h;
while(p!=NULL)
{
i++;
p-》order=i;
p=p-》next;
}
print(h);
printf("排序成功!!!\n");
}
void tongji(STUDENT *h)
{
STUDENT *p;
int a,b,i;
printf("请输入课程编号\n");
scanf("%d",&i);
printf("请输入分数段:\n");
scanf("%d,%d",&a,&b);
p=h;
while(p!=NULL)
{
printf("\n\n\n***********************找到了***********************\n");
if(p-》score《=b)
{
printf("|学号 | 姓名 | 语文 | 英语 | 数学 | 总分 | 平均分 | 名次 |\n");
printf("|--------|---------|----|----|----|------|------|---|\n");
printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p-》no,p-》name,p-》score,p-》sum,p-》average,p-》order);
}
p=p-》next;
}
printf("***********************end***********************\n");
}
c语言 学生管理系统
#include 《stdlib.h》
#include 《stdio.h》
#include 《iostream》
#include 《string》
#include 《fstream》
using namespace std;
struct Node//定义链表结点
{
char* class_0;//班级
int number;
char* name;//姓名
float elec;//电子技术成绩
float c_prog;//C程序设计成绩
float media;//多媒体技术成绩
float eng;//大学英语成绩
float math;//高等数学成绩
float sport;//大学体育成绩
float polity;//马克思主义政治经济学成绩
float ave;//平均成绩
int order;//名次
Node* link;
Node(){link=NULL;}
Node(int _number,char* _class_0,char* _name,float _elec,
float _c_prog,float _media,float _eng,float _math,
float _sport,float _polity,float _ave,int _order,Node* next)
{
number=_number;
class_0=new char;
strcpy(class_0,_class_0);
name=new char;
strcpy(name,_name);
elec=_elec;
c_prog=_c_prog;
media=_media;
eng=_eng;
math=_math;
sport=_sport;
polity=_polity;
ave=_ave;
order=_order;
link=next;
}
~Node()
{
delete class_0;
delete name;
}
};
class StudentScore
{
private:
Node* first;//链表的头指针
int choice;//选择数据的读入方式
int fileNum;//当前文件数减一
int fileLoc;//定位当前文件
string* fileName;
int operChoice;
int RecordLength;
public:
StudentScore();
void Save();
void BuildList();//手工建立成绩链表
void ReadInfo(int k);//从内存中读入学生信息
void ClearList();
void Statistic();
void Sort();
void Add();
void Delete();
void PrintList();
void Menu();
};
StudentScore::StudentScore()
{
RecordLength=0;
operChoice=0;
first=NULL;
choice=0;
fileLoc=0;
fileNum=0;
fileName=new string;//最多可以存10个文件
}
int GetOrder(Node* first,float ave);
void StudentScore::BuildList()
{
int _number;//学号
char* _class_0=new char;//班级
char* _name=new char;//姓名
float _elec;//电子技术成绩
float _c_prog;//C程序设计成绩
float _media;//多媒体技术成绩
float _eng;//大学英语成绩
float _math;//高等数学成绩
float _sport;//大学体育成绩
float _polity;//马克思主义政治经济学成绩
float _ave;//平均成绩
int _order;//名次
char c;
Node *p,*r=NULL;
first=NULL;
cout《《"您要输入学生成绩信息?"《《endl;
while((c=getchar())==’n’);
while(tolower(c)!=’n’)
{
cin》》_class_0;//班级
cin》》_number;
cin》》_name;//姓名
cin》》_elec;
cin》》_c_prog;
cin》》_media;
cin》》_eng;
cin》》_math;
cin》》_sport;
cin》》_polity;
_ave=(_elec+_c_prog+_media+_eng+_math+_sport+_polity)/7;//求得平均成绩
_order=GetOrder(first,_ave);
p=new Node(_number,_class_0,_name,_elec,
_c_prog,_media,_eng,_math,_sport,_polity,
_ave,_order,NULL);//建立一个新的结点储存信息
if(first!=NULL)
r-》link=p;
else first=p;
r=p;
RecordLength++;
cout《《"您要输入学生成绩信息?"《《endl;
while((c=getchar())==’n’);
}
}
int GetOrder(Node* first,float ave)//名次记录有严重问题
{
int order=1;
Node* temp=first;
for(;temp;temp=temp-》link)
{ if(temp-》ave》ave) order++;
if(temp-》ave《ave) (temp-》order)++;
}
return order;
}
void StudentScore::Statistic()
{
Node* temp=first;
float a_elec=0.0;//电子技术成绩
float a_c_prog=0.0;//C程序设计成绩
float a_media=0.0;//多媒体技术成绩
float a_eng=0.0;//大学英语成绩
float a_math=0.0;//高等数学成绩
float a_sport=0.0;//大学体育成绩
float a_polity=0.0;//马克思主义政治经济学成绩
int i=0;
while(temp)
{
a_elec+=temp-》elec;
a_c_prog+=temp-》c_prog;
a_media+=temp-》media;
a_eng+=temp-》eng;
a_math+=temp-》math;
a_sport+=temp-》sport;
a_polity+=temp-》polity;
i++;
temp=temp-》link;
}
a_elec=a_elec/i;
a_c_prog=a_c_prog/i;
a_media=a_media/i;
a_eng=a_eng/i;
a_math=a_math/i;
a_sport=a_sport/i;
a_polity=a_polity/i;
cout《《"电子技术平均成绩为:"《《a_elec《《endl;
cout《《"c程序设计平均成绩为:"《《a_c_prog《《endl;
cout《《"多媒体技术平均成绩为:"《《a_media《《endl;
cout《《"英语平均成绩为:"《《a_eng《《endl;
cout《《"高等数学平均成绩为:"《《a_math《《endl;
cout《《"体育平均成绩为:"《《a_sport《《endl;
cout《《"政治平均成绩为:"《《a_polity《《endl;
}
void StudentScore::Delete()
{
int studNum;
Node* p;
Node* temp=first;
cout《《"请输入要删除的学生学号"《《endl;
cin》》studNum;
float average;
for(;temp;temp=temp-》link)
{
cout《《temp-》number;
if(temp-》number==studNum)
{
average=temp-》ave;
if(temp==first)//说明是第一次
{
first=first-》link;
delete temp;
break;//如果不跳出的话 temp=temp-》link会出错
}
else
{
p-》link=temp-》link;
delete temp;
break;
}
}
p=temp;
RecordLength--;
}
//下面修改学生排名
temp=first;
for(;temp;temp=temp-》link)
if(temp-》ave《average) temp-》order--;
}
void StudentScore::Add()
{
int _number;//学号
char* _class_0=new char;//班级
char* _name=new char;//姓名
float _elec;//电子技术成绩
float _c_prog;//C程序设计成绩
float _media;//多媒体技术成绩
float _eng;//大学英语成绩
float _math;//高等数学成绩
float _sport;//大学体育成绩
float _polity;//马克思主义政治经济学成绩
float _ave;//平均成绩
int _order;//名次
char c;
Node *p,*r=NULL;
r=first;
while(r-》link)
r=r-》link;
// first=NULL;
cout《《"您要输入学生成绩信息?"《《endl;
while((c=getchar())==’n’);
while(tolower(c)!=’n’)
{
cin》》_class_0;//班级
cin》》_number;
cin》》_name;//姓名
cin》》_elec;
cin》》_c_prog;
cin》》_media;
cin》》_eng;
cin》》_math;
cin》》_sport;
cin》》_polity;
_ave=(_elec+_c_prog+_media+_eng+_math+_sport+_polity)/7;//求得平均成绩
//写一个返回排名的程序
_order=GetOrder(first,_ave);
p=new Node(_number,_class_0,_name,_elec,
_c_prog,_media,_eng,_math,_sport,_polity,
_ave,_order,NULL);//建立一个新的结点储存信息
if(first!=NULL)
r-》link=p;
else first=p;
r=p;
RecordLength++;
cout《《"您要输入学生成绩信息?"《《endl;
while((c=getchar())==’n’);
}
}
void StudentScore::Sort()//简单bubble排序从高分到低分排序
{
int i=0;
Node* temp=first;
Node* before;
// Node* p=first;
for(;temp-》link;)
{
if(temp-》ave《temp-》link-》ave)
{
if(temp==first)//说明是第一个结点
{
first=first-》link;
// p=temp;
// temp=temp-》link;
temp-》link=temp-》link-》link;
first-》link=temp;
before=first;
}
else//不是第一个结点
{
before-》link=temp-》link;
temp-》link=temp-》link-》link;
before-》link-》link=temp;
before=before-》link;
}
}
else
{
temp=temp-》link;
}
i++;//计算次数
}
for(;i》0;i--)
{
temp=first;
for(int j=0;j《i;j++)
{
if(temp-》ave《temp-》link-》ave)
{
cout《《"small!"《《endl;
if(temp==first)//说明是第一个结点
{
first=first-》link;
// p=temp;
// temp=temp-》link;
temp-》link=temp-》link-》link;
first-》link=temp;
before=first;
}
else//不是第一个结点
{
before-》link=temp-》link;
temp-》link=temp-》link-》link;
before-》link-》link=temp;
before=before-》link;
}
}
else
{
temp=temp-》link;
}
}
}
}
/*
bool IsSorted(Node* first)
{
for(;first;first=first-》link)
if(first-》ave《first-》link-》ave) return false;
return true;
}*/
void StudentScore::PrintList()//打印链表程序
{
cout《《"The list contains:"《《endl;
Node* temp=first;
for(;temp;temp=temp-》link)
{
cout《《temp-》class_0《《","《《temp-》name《《endl;
cout《《temp-》order《《endl;
}
}
void StudentScore::ClearList()//清除链表
{
Node* p=new Node;
while(first)
{
p=first-》link;
delete first;
first=p;
}
}
//读函数
void StudentScore::ReadInfo(int k)//读第k个文件的信息存入链表
{
// int wordLength;//记录子段长度
int _number;//学号
char* _class_0=new char;//班级
char* _name=new char;//姓名
float _elec;//电子技术成绩
float _c_prog;//C程序设计成绩
float _media;//多媒体技术成绩
float _eng;//大学英语成绩
float _math;//高等数学成绩
float _sport;//大学体育成绩
float _polity;//马克思主义政治经济学成绩
float _ave;//平均成绩
int _order;//名次
Node *p,*r=NULL;
first=NULL;
ifstream Infile(fileName.c_str());
if(!Infile)
{
cout《《"file is not present!"《《endl;
return;
}
Infile》》RecordLength;
cout《《RecordLength;
for(int i=0;i《RecordLength;i++)
{
Infile》》_class_0;//班级
// cout《《_class_0;
Infile》》_number;
Infile》》_name;//姓名
Infile》》_elec;
Infile》》_c_prog;
Infile》》_media;
Infile》》_eng;
Infile》》_math;
Infile》》_sport;
Infile》》_polity;
Infile》》_ave;
Infile》》_order;
_ave=(_elec+_c_prog+_media+_eng+_math+_sport+_polity)/7;//求得平均成绩
//写一个返回排名的程序
_order=GetOrder(first,_ave);
p=new Node(_number,_class_0,_name,_elec,
_c_prog,_media,_eng,_math,_sport,_polity,
_ave,_order,NULL);//建立一个新的结点储存信息
if(first!=NULL)
r-》link=p;
else first=p;
r=p;
}
}
void StudentScore::Save()
{
string tempName;
cout《《"请输入将要保存的文件名:"《《endl;
//要判断是否跟现有文件重名
cin》》tempName;
ofstream savefile(tempName.c_str());//要做一个转换
Node* temp=first;
savefile《《RecordLength《《endl;
for(;temp;temp=temp-》link)
{
savefile《《temp-》class_0《《" "《《temp-》number《《" "《《temp-》name《《" "《《temp-》elec《《" "
《《temp-》c_prog《《" "《《temp-》media《《" "《《temp-》eng《《" "《《temp-》math《《" "
《《temp-》sport《《" "《《temp-》polity《《" "《《temp-》ave《《" "《《temp-》order《《endl;
}
savefile.close();
//读取文件表信息
ifstream Readfileinfo("FileRecord.txt");
Readfileinfo》》fileNum;
for(int i=0;i《fileNum;i++)
Readfileinfo》》fileName;
Readfileinfo.close();
fileNum++;
fileName=tempName;
//修改文件表信息
ofstream changefile("FileRecord.txt");
changefile《《fileNum《《endl;
for(i=0;i《fileNum;i++)
changefile《《fileName《《endl;
changefile.close();
}
void StudentScore::Menu()
{
cout《《"请您选择数据的读入方式:"《《endl;
cout《《"(1) 重新手动建立一份新的数据表"《《endl;
cout《《"(2) 从文件中读入数据"《《endl;
cout《《"请选择:";
cin》》choice;
if(choice==1)
{
BuildList();
}
if(choice==2)
{
cout《《"当前有如下文件,请选择读入文件:"《《endl;
ifstream fileRecord("fileRecord.txt");
if(!fileRecord)
{
cout《《"fileRecord is not present!"《《endl;
return;
}
fileRecord》》fileNum;
cout《《"当前有"《《fileNum《《"个文件:"《《endl;
for(int i=0;i《fileNum;i++)
{
fileRecord》》fileName;
cout《《fileName《《" ";
}
cout《《"请您选择一个文件:";
cin》》fileLoc;
ReadInfo(fileLoc-1);
PrintList();
}
cout《《"请选择您需要的操作:"《《endl;
cout《《"(1) 统计学生各科成绩"《《endl;
cout《《"(2) 删除某个学生成绩记录"《《endl;
cout《《"(3) 增加某个学生成绩记录"《《endl;
cout《《"(4) 在链表中为所有学生成绩记录排序"《《endl;
cin》》operChoice;
if(operChoice==1)
Statistic();
if(operChoice==2)
Delete();
if(operChoice==3)
Add();
if(operChoice==4)
Sort();
Save();
ClearList();
}
int main()
{
cout《《"//////////////////////////////////"《《endl;
cout《《"欢迎使用学生成绩管理系统!"《《endl;
cout《《"//////////////////////////////////"《《endl;
cout《《endl;
cout《《endl;
StudentScore s;
s.Menu();
return 0;
}
c语言学生信息管理系统代码
代码如下:
#include《stdio.h》
#include《malloc.h》
#include《stdlib.h》
#include《string.h》
#include《conio.h》
typedef struct examinee //考生信息结构
{ char examno; //准考证号
char name; //姓名
char sex; //性别
short age; //年龄
char examtype; //报考科目
}ElemType;
typedef struct Node //定义链表结点
{
ElemType data; //数据域
struct Node *next; //指针域
}Node,*List,*position;
List make_empty( List L ); //创建一个带头结点的空表
int is_empty( List L ); //测试链表是否是空表
int is_last( position p, List L ); //测试当前位置是否是表尾
position make_node( position p,int n ); //创建结点并输入考生信息
void put_information( position p ); //是否输出该考生信息
void put_name_information( List L ); //输出姓名为xx的考生信息
int put_pos_information( position p ); //输出该地址考生信息
void link_to_tail( List L, position p ); //将结点连接到表尾
int ciculation_make(); //循环创建考生信息
int judge_put_all(); //是否输出所有考生信息
void put_all(List L); //输出所有考生信息。
position find( List L ); //查找第一个姓名为xx的元素并返回位置
position find_previous( List L ); //查找第一个姓名为xx的元素并返回该元素直接前驱的位置
//int judge_delete_val(); //询问是否删除考生数据
int delete_val( List L ); //删除指定考生信息并输出其信息
void menu(List L); //菜单函数
List L;
//position p;
int
main( void )
{
List L = NULL; //定义头结点指针
position p = NULL; //定义表工作指针
L = make_empty( L ); //创建空表
printf("\t\t\t★★考生报名管理程序★★\n\t\t----------------------------------------\n");
menu(L);
return 0;
}
//创建一个带头结点的空表
List
make_empty( List L)
{
L = ( List ) malloc (sizeof( Node ));
if(NULL == L)
{
printf("内存分配失败");
exit( 1 );
}
L-》next = NULL;
//printf("空表创建成功。\n");
return L;
}
//创建结点并输入考生信息
position
make_node( position p ,int n)
{
if(n) //n为1是创建结点并输入,n为0是修改
{
p = ( position ) malloc ( sizeof ( Node ));
p-》next = NULL ;
}
printf("请输入考生准考证号:");
gets(p-》data.examno);
printf("请输入考生姓名:");
gets(p-》data.name);
do
{
printf("请输入考生性别,只能输入“男”或者“女”:");
gets(p-》data.sex);
}
while( 0 != strcmp( p-》data.sex, "男" ) && 0 != strcmp( p-》data.sex, "女" )); //判断性别是否有误
printf("请输入考生年龄:");
scanf("%hd",&p-》data.age);
getchar(); //如果把这句删掉,就“无法执行”下面的报考类别
/*下面的do while用来判断报考类别是否输入有误*/
do
{
printf("请输入报考类别,只能输入“数学”或“英语”或者“数据结构”:");
gets(p-》data.examtype);
}
while( 0 != strcmp( "英语", p-》data.examtype ) && 0 != strcmp( "数学", p-》data.examtype ) && 0 != strcmp( "数据结构", p-》data.examtype ));
if(n)
{
printf("报名成功\n");
}
else
{
printf("修改成功\n");
}
return p;
}
//前插法;
void
link_to_tail( List L, position p)
{
p-》next = L-》next;
L-》next = p;
}
//查找第一个姓名为xx的元素并返回位置
position
find( List L )
{
position p = L-》next;
char name;
printf("请输入你要查找的考生姓名:");
gets(name);
while( p != NULL && 0 != strcmp( p-》data.name , name))
{
p=p-》next;
}
return p;
}
//测试链表是否是空表
int
is_empty( List L )
{
return L-》next == NULL;
}
//测试当前位置是否是表尾
int
is_last( position p, List L )
{
return p-》next == NULL;
}
//输出姓名为xx的考生信息
void
put_name_information( List L )
{
position p = find(L);
if(p!=NULL)
{
printf("您要查找的考生信息:\n");
printf("准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n\n",p-》data.examno,p-》data.name,p-》data.sex,p-》data.age,p-》data.examtype);
}
else
{
printf("没有您要找的学生。\n");
}
}
//循环创建考生信息
int
ciculation_make()
{
int n = 2;
do
{
printf("是否继续创建考生信息?是请输入“1”,不是请输入“0”:");
scanf("%d",&n);
getchar();
}
while( n != 0 && n != 1);
return n;
}
//是否输出考生信息
void
put_information( position p )
{
int n=2;
do
{
printf("是否输出该考生信息?是请输入“1”,不是请输入“0”:");
scanf("%d",&n);
getchar();
}
while( n != 0 && n != 1);
if(n)
{
printf("准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n",p-》data.examno,p-》data.name,p-》data.sex,p-》data.age,p-》data.examtype);
}
}
//是否输出所有考生信息
int
judge_put_all()
{
int n = 2;
do
{
printf("是否输出所有考生信息?是请输入“1”,不是请输入“0”:");
scanf("%d",&n);
getchar();
}
while( n != 0 && n != 1);
return n;
}
//输出所有考生信息
void
put_all(List L)
{
if(L-》next == NULL)
{
printf("现无考生报名!\n");
}
else
{
position p=L-》next;
while( p != NULL )
{
printf("准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n",p-》data.examno,p-》data.name,p-》data.sex,p-》data.age,p-》data.examtype);
p=p-》next;
}
}
//getchar();
}
//询问是否删除考生数据
int
judge_delete_val()
{
int n = 2;
do
{
printf("是否要删除某个考生数据?是请输入“1”,不是输入“0”:");
scanf("%d",&n);
getchar();
}
while( n != 0 && n != 1);
return n;
}
//查找第一个姓名为xx的元素并返回其直接前驱的位置
position
find_previous( List L )
{
position q = L;
position p = L-》next;
char name;
printf("请输入你要查找的考生姓名:");
gets(name);
while( p != NULL && 0 != strcmp( p-》data.name , name))
{
q=p;
p=p-》next;
}
if( p != NULL )
{
return q;
}
else
return p;
}
//删除指定考生信息并输出其信息
int
delete_val(List L)
{
int n=2;
position q=NULL;
position p=find_previous( L ); //返回考生信息地址
if( NULL == p )
{
printf("你要删除的考生不存在\n");
return 0;
}
else
{
q = p-》next;
p-》next = q-》next;
printf("删除成功。\n删除的考生信息为:\n");
printf("准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n",q-》data.examno,q-》data.name,q-》data.sex,q-》data.age,q-》data.examtype);
free(q);
return 1;
}
}
//输出该地址考试信息
int
put_pos_information( position p )
{
if(p != NULL )
{
printf("准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n\n",p-》data.examno,p-》data.name,p-》data.sex,p-》data.age,p-》data.examtype);
return 1;
}
else
{
printf("没有您要查找的学生。");
return 0;
}
}
//菜单函数
void
menu(List L)
{
printf("\t\t\t a. 考生报名入口\n");
printf("\t\t\t b. 查询考生信息\n");
printf("\t\t\t c. 修改考生信息\n");
printf("\t\t\t d. 删除考生信息\n");
printf("\t\t\t e. 全部考生信息\n");
printf("\t\t\t f. 程序作者信息\n");
printf("\t\t\t g. 退出程序\n");
char n=’h’;
while(n != ’g’)
{
do //确定正确输入
{
printf("请通过字母序号选择功能:");
n = getchar();
getchar();
putchar(’\n’);
if( n 《 ’a’ || n 》 ’g’)
{
printf("错误的字母序号。\n");
}
}
while( n 《 ’a’ || n 》 ’g’ );
switch (n)
{
case ’a’:
{
printf("请输入报名考生信息:\n");
position p = make_node( p, 1 ); //创建新结点
link_to_tail( L, p ); //将新结点连接到表上
put_information( p ); //是否输出该考生信息
putchar(’\n’);
}
break;
case ’b’:
{
put_name_information( L );
putchar(’\n’);
}
break;
case ’c’:
{
int n=0;
position p = NULL;
printf("您正在进行修改操作。\n");
p = find(L);
n = put_pos_information( p );
if(n)
{
make_node( p , 0 );
put_information( p ); //是否输出该考生信息
}
putchar(’\n’);
}
break;
case ’d’:
{
printf("您正在进行删除操作。\n");
delete_val( L );
putchar(’\n’);
}
break;
case ’e’:
{
put_all( L );
putchar(’\n’);
}
break;
case ’f’:
{
printf(" 修改日期 版本号 修改人 修改内容 \n");
printf(" --------------------------------------------------------\n");
printf(" 2018.6.19 v2.0 陈百川 增加主菜单\n");
printf(" 2018.6.23 v3.0 陈百川 增加生成文件功能\n\n");
printf(" 该版本号为v2.0\n");
putchar(’\n’);
}
break;
default:
break;
}
}
printf(" 感谢本次使用,祝您生活愉快。");
getch();
}
评论收起
怎样用c语言编写一个学生信息管理系统
给你个我写的参考:
#
include
《stdio.h》
#
include
《malloc.h》
struct
Student
{
char
name;
int
age;
int
id;
char
sex;
};
int
input(struct
Student
**
pArr)
{
int
i;
int
len;
printf("请输入学生的个数:\n");
printf("len
=
");
scanf("%d",
&len);
*pArr
=
(struct
Student
*)malloc(len
*
sizeof(struct
Student));
for(i
=
0;
i
《
len;
++i)
{
printf("请输入第%d个学生的信息:\n",
i
+
1);
printf("姓名
=
");
scanf("%s",
(*pArr).name);
printf("年龄
=
");
scanf("%d",
&((*pArr).age));
printf("学号
=
");
scanf("%d",
&((*pArr).id));
printf("性别(1-男
0-女)
=
");
scanf("
%c",
&((*pArr).sex));
}
return
len;
}
void
output(struct
Student
*
pArr,
int
len,
int
sid)
{
int
i;
for(i
=
0;
i
《
len;
++i)
if(pArr.id
==
sid)
break;
printf("\n\n学生的信息是:\n");
printf("第%d个学生的信息是:\n",
i
+
1);
printf("姓名
=
%s\n",
pArr.name);
printf("年龄
=
%d\n",
pArr.age);
printf("学号
=
%d\n",
pArr.id);
if(pArr.sex
==
’1’)
printf("性别
=
男\n");
else
printf("性别
=
女\n");
}
int
main(void)
{
int
len,
id;
struct
Student
*
pArr;
len
=
input(&pArr);
printf("输入要查找的学号:\n");
scanf("%d",
&id);
output(pArr,
len,
id);
return
0;
}
C语言学生信息管理系统
#include《stdio.h》
#include《string.h》
#include《stdlib.h》
#include《conio.h》
#define max 20
typedef struct student //学生
{
char sno; // 学号
char sname; //姓名
char sex; //性别
char age; //年龄
char depart; //系
char classs; //班
char grade; //年级
struct student* next;
} student;
student* head;
int LogOn() //登录模块,已实现输入密码不回显,如果中途发现输错某几位,可退格键重输
{
char username;
printf("\n请输入用户名:");
scanf("%s",username);
printf("\n请输入密码(最多15位):");
//开始以不回显且支持退格方式获取输入密码
int i=0;
while((i》=0)&&(password=getch())!=13)//条件i》=0是用于限制退格的范围
{
if(password==’\b’)//对退格键的处理
{
printf("%c%c%c",’\b’,’\0’,’\b’);
i=i-2;
}
else
printf("*");
}
password=’\0’;
//已获取密码。验证用户身份
if(!strcmp(username,"zhang")&&!strcmp(password,"8147086"))
{
printf("\n登录成功!");
return 1;
}
else
return 0;
}
void regist()
{
char ch;
student *s,*ptr; //s用来建新结点,ptr用来暂存头结点
do
{
s=(student*)malloc(sizeof(student)); // 新建一个学生结点
printf("\n开始注册..."); //开始注册
printf("\n请输入该学生的学号:");
scanf("%s",s-》sno);
printf("\n请输入该学生的姓名:");
scanf("%s",s-》sname);
printf("\n请输入该学生的性别:");
scanf("%s",s-》sex);
printf("\n请输入该学生的年龄:");
scanf("%s",s-》age);
printf("\n请输入该学生的系:");
scanf("%s",s-》depart);
printf("\n请输入该学生所在的班:");
scanf("%s",s-》classs);
printf("\n请输入该学生所在的年级");
scanf("%s",s-》grade);
ptr=head;
head=s;//将新结点插入队头
s-》next=ptr;
fflush(stdin);
printf("\n请问是否继续注册?(Y/N)");
scanf("%c",&ch);
}while(ch==’Y’||ch==’y’);
return;
}
void ElePrint(char str) //输出单个元素
{
if(str==NULL) exit(0);
printf("%s",str);
for(unsigned int i=0;i《12-strlen(str);i++) printf(" ");//为了对齐输出,需插入一些空格
return;
}
int LinePrint(student *ptr) //输出一行
{
if(ptr==NULL) //检查传进来的指针
return 0;
printf("\n");
ElePrint(ptr-》sno);
ElePrint(ptr-》sname);
ElePrint(ptr-》age);
ElePrint(ptr-》sex);
ElePrint(ptr-》depart);
ElePrint(ptr-》classs);
ElePrint(ptr-》grade);
return 1;
}
void print() //输出全部学生信息
{
student *ptr=head;
printf("\n学号 姓名 年龄 性别 系 班 年级 ");
while(ptr)
{
LinePrint(ptr);
ptr=ptr-》next;
}
printf("\n");
return;
}
void search()//查询模块
{
int method;//查询方式
char no; //用来接收查询关键字
while(1)
{
printf("\n请选择查询方式");
printf("\n1.按学号查询");
printf("\n2.按姓名查询");
printf("\n3.按所在系查询");
printf("\n4.按所在班级查询");
printf("\n5.按所在年级查询");
printf("\n6.打印全部学生信息");
printf("\n7.返回主菜单\n");
scanf("%d",&method);
student *p=head,*temp;
switch(method)
{
case 1:
printf("\n请输入要查询的学号:");
scanf("%s",no);
while(p)
{
if(!strcmp(p-》sno,no))
break;
else
{
temp=p;
p=p-》next;
}
}
printf("\n学号 姓名 年龄 性别 系 班 年级 ");
LinePrint(p);
break;
case 2:
printf("\n请输入要查询的姓名:");
scanf("%s",name);
printf("\n学号 姓名 年龄 性别 系 班 年级 ");
while(p)
{
if(!strcmp(p-》sname,name))
LinePrint(p);
p=p-》next;
}
break;
case 3:
printf("\n请输入学生所在的系:");
scanf("%s",departm);
printf("\n学号 姓名 年龄 性别 系 班 年级 ");
while(p)
{
if(!strcmp(p-》depart,departm))
LinePrint(p);
p=p-》next;
}
break;
case 4:
printf("\n请输入学生所在的班:");
scanf("%s",clss);
printf("\n请输入学生所在的年级:");
scanf("%s",grades);
printf("\n学号 姓名 年龄 性别 系 班 年级 ");
while(p)
{
if(!strcmp(p-》classs,clss)&&!strcmp(p-》grade,grades))
LinePrint(p);
p=p-》next;
}
break;
case 5:
printf("\n请输入学生所在的年级:");
scanf("%s",grades);
printf("\n学号 姓名 年龄 性别 系 班 年级 ");
while(p)
{
if(!strcmp(p-》grade,grades))
LinePrint(p);
p=p-》next;
}
break;
case 6:
print();
break;
case 7:
return;
default:
printf("很抱歉,暂无此查询方式!");
break;
}
}
}
void modify()//修改学生信息
{
char num;
student *p=head;
printf("\n请输入要修改的学生的学号:");
scanf("%s",num);
while(p)
{
if(!strcmp(p-》sno,num))
break;
else
p=p-》next;
}
if(p==NULL)
{
printf("\n错误:没有此学生的信息!\n");
return;
}
LinePrint(p);
printf("\n请输入要修改的该学生的信息:");
printf("\n1.姓名");
printf("\n2.性别");
printf("\n3.年龄");
printf("\n4.所在的系");
printf("\n5.所在的班");
printf("\n6.所在的年级");
char name1;
int select;
fflush(stdin);
scanf("%d",&select);
printf("\n请输入新的信息:");
switch(select)
{
case 1:
scanf("%s",name1);
strcpy(p-》sname,name1);
break;
case 2:
scanf("%s",sex1);
strcpy(p-》sex,sex1);
break;
case 3:
scanf("%s",age1);
strcpy(p-》age,age1);
break;
case 4:
scanf("%s",depart1);
strcpy(p-》depart,depart1);
break;
case 5:
scanf("%s",class1);
strcpy(p-》classs,class1);
break;
case 6:
scanf("%s",grade1);
strcpy(p-》grade,grade1);
break;
default:
printf("\nError!");
break;
}
LinePrint(p);
return;
}
void del()// 删除某学生的信息
{
student *p=head,*temp=head,*s;
char num1;
printf("\n请输入要删除的学生的学号:");
scanf("%s",num1);
while(p)//查找该学生所在的结点
{
if(!strcmp(p-》sno,num1))
break;
else
{
temp=p;
p=p-》next;
}
}//while
if(!p)
{
printf("\n不存在此学生的信息.");
return;
}
LinePrint(p);//输出该学生的信息
printf("\n请问真的要删除该学生的信息吗?(Y/N)");
char ch;
fflush(stdin);
scanf("%c",&ch);
if(ch==’Y’||ch==’y’)
{
s=p-》next;
temp-》next=s;
free(p);
printf("\n已经删除该学生的信息.");
}
return;
}
void sort() //排序模块。将学生记录按学号从小到大排列。用起泡排序算法实现
{
student *ptr,*s=head,*p;
int count=0,count1;
while(s)//统计链表结点个数
{
count++;
s=s-》next;
}
for(int i=1;i《count;i++)
{
ptr=head;
p=NULL;
count1=count-i; //用来控制每轮起泡排序的终点,即每次把学号最小的结点移到倒数第i个结点
while(ptr&&ptr-》next&&(count1--))
{
if(strcmp(ptr-》sno,ptr-》next-》sno)》0)
{
s=ptr-》next;
ptr-》next=s-》next;
if(p==NULL) //ptr处于队头时
head=s;
else
p-》next=s;
s-》next=ptr;
p=s;
}
else
{
ptr=ptr-》next;
if(p==NULL) //ptr处于队头时
p=head;
else
p=p-》next;
}
}
}
return;
}
void quit()
{
char ch;
printf("\n真的要退出?(Y/N)");
fflush(stdin);
scanf("%c",&ch);
if(ch==’Y’||ch==’y’)
exit(0);
return;
}
int main()
{
int option;
printf("\nCopyright@2005 KongXinCai All rights reserved.");
printf("\n欢迎使用学生信息管理系统!\n");
//登录模块
int icheck=0;
while(icheck《3)
{
if(LogOn()==0)
icheck++;
else
break;
}
if(icheck==3)
{
printf("\n连续登录三次不成功,退出!");
exit(0);
}
//系统界面
while(1)
{
printf("\n\n请选择需要的服务:");
printf("\n1.注册");
printf("\n2.查询");
printf("\n3.修改");
printf("\n4.删除");
printf("\n5.排序");
printf("\n7.求平均");
printf("\n6.退出\n");
scanf("%d",&option);
switch(option)
{
case 1:
regist();
break;
case 2:
search();
break;
case 3:
modify();
break;
case 4:
del();
break;
case 5:
sort();
break;
case 6:
quit();
break;
}
}
return 0;
}

更多文章:
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30
excel连接sql数据库教程(excel怎么连接sql数据库)
2026年10月14日 19:40






