挺好的一个题目啊
学生信息管理系统c语言代码(c语言写学生信息管理系统)
学生信息管理系统c语言代码(c语言写学生信息管理系统)
但我可不愿意帮人写作业
网上很多类似的,你可以参考下:
#include
#include
char name[30];
float math;
float chinese;
float english;
float erage;
};
int MenuCho(void);
int EnterAccount(void);
void Enter(struct student fst);
void Amend(struct student src);
void Delete(struct student next);
void Print(struct student out);
main()
{struct student one[100] = {0}, look = one;
int menu, t;
while ((menu = MenuCho()) != 0)
if (menu >= 1 && menu <= 4 && (t = EnterAccount())) {
look = one + t;
switch (menu) {
case 1:
Enter(look);
break;
case 2:
if (strcmp(look->name, ""))
printf("学号:%dn姓名: %sn语文成绩: %.1fn数学成绩:%.1fn英语成绩: %fn平均"成绩:%.1fn",
t, look->name, look->chinese, look->math, look->english, look->erage);
else
printf("对不起,该学号不存在!n");
break;
case 3:
Amend(look);
break;
case 4:
Delete(look);
break;
}}
else if (menu == 5)
Print(one);
else
printf("错误的请求!n");
return 0;
}int MenuCho(void)
{int cho;
printf("请选择:n"
"1 - 新建学生信息n"
"2 - 查找学生信息n"
"3 - 修改学生信息n"
"4 - 删除学生信息n"
"5 - 打印学生信息n"
"0 - 退出n");
scanf("%d", &cho);
return cho;
}int EnterAccount(void)
{int ret;
printf("请输入学号:n");
scanf("%d", &ret);
if (ret >= 1 && ret <= 100)
return ret -1;
return 0;
}void Enter(struct student fst)
{printf("请输入学生姓名、语文成绩、数学成绩、英语成绩和平均成绩n");
scanf("%s%f%f%f%f", fst->name, &fst->chinese, &fst->math, &fst->english, &fst->erage);
}void Amend(struct student src)
{int t;
printf("请选择:n"
"1 - 修改学生姓名n"
"2 - 修改学生语文成绩n"
"3 - 修改学生数学成绩n"
"4 - 修改学生英语成绩n"
"5 - 修改学生平均成绩n");
scanf("%d", &t);
switch (t) {
case 1:
printf("请输入学生的新名字n");
scanf("%s", src->name);
break;
case 2:
printf("请输入学生新的语文成绩n");
scanf("%f", &src->chinese);
break;
case 3:
printf("请输入学生新的数学成绩n");
scanf("%f", &src->math);
break;
case 4:
printf("请输入学生新的英语成绩n");
scanf("%f", &src->english);
break;
case 5:
printf("请输入学生新的平均成绩n");
scanf("%f", &src->erage);
break;
}}
void Delete(struct student next)
{strcpy(next->name, "");
next->math = next->english = next->chinese = next->erage = 0.0;
}void Print(struct student out)
{struct student up;
for (up = out; out < &up[100]; out++)
if (strcmp(out->name, ""))
printf("学号:%dn姓名: %sn语文成绩: %.1fn数学成绩:%.1fn英语成绩: %.1fn平均成绩:%.1fn",
out-up + 1, out->name, out->chinese, out->math, out->english, out->erage);
}
不是我说你,象你这种问题,求了一个完整的程序,本来就不好弄,人家费力给你解决,还不给高分,看了就没兴趣答了,本来有个年前用MFC做的数据库管理系统,偏不发,哼~~
C语言
,学生信息管理系统 我有做好的
网上没有的
原创作品
采纳哦!
稍微用了点c++(你给的分太低)
如下图所示:
studf.txt
作日志文件:
#include
#include
#include
#include
#define max 20
typedef struct student //学生
{char sno[max]; // 学号
char sname[max]; //姓名
char [max]; //性别
char age[max]; //年龄
char depart[max]; //系
char classs[max]; //班
char grade[max]; //年级
struct student next;
} student;
student head;
int LogOn() //登录模块,已实现输入密码不回显,如果中途发现输错某几位,可退格键重输
{char username[max],password[max];
printf("n请输入用户名:");
scanf("%s",username);
printf("n请输入密码(最多15位):");
//开始以不回显且支持退格方式获取输入密码
int i=0;
while((i>=0)&&(password[i++]=getch())!=13)//条件i>=0是用于限制退格的范围
{if(password[i-1]=='b')//对退格键的处理
{printf("%c%c%c",'b','0','b');
i=i-2;
}else
printf("");
}password[--i]='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->);
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->);
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 mod;//查询方式
char no[max],name[max],departm[max],clss[max],grades[max]; //用来接收查询关键字
while(1)
{printf("n请选择查询方式");
printf("n1.按学号查询");
printf("n2.按姓名查询");
printf("n3.按所在系查询");
printf("n4.按所在班级查询");
printf("n5.按所在年级查询");
printf("n6.打印全部学生信息");
printf("n7.返回主菜单n");
scanf("%d",&mod);
student p=head,temp;
switch(mod)
{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[max];
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[max],1[max],age1[max],depart1[max],class1[max],grade1[max];
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",1);
strcpy(p->,1);
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[max];
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 {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("nn请选择需要的服务:"); 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; } 基本上不用再注释了,用到都是比较基本的句型,有几处修改了一下 #include struct student {int num; //学号 char name[20];//姓名 float score; //分数 }yiban[29]; //总人数值为29 int s=0; //s为全局变量,表示总人数 int main() {int tianjia(); int shanchu(); int chaxun(); int xiugai(); int paixu(); int xuanze; while(1){ printf(" "); printf("学生信息管理系统 "); printf(" 1.初始化学生信息 "); printf(" 2.删除学生信息 "); printf(" 3.查询学生信息 "); printf(" 4.修改学生信息 "); printf(" 5.退出 "); printf(" "); printf(" "); printf("请输入你的选择 "); scanf("%d",&xuanze); switch(xuanze) {case 1:{tianjia();break;} case 2:{shanchu();break;} case 3:{chaxun();break;} case 4:{xiugai();break;} case 5:{paixu();break;} }} return 0; }int tianjia() {int i,j; printf("请输入需要添加的学生个数: "); scanf("%d",&j); s+=j; //总人数增加 for(i=0;i {printf("请输入添加的第%d个数据(输入格式为 学号,姓名,成绩): ",i+1); scanf("%d,%s,%f",&yiban[i].num,yiban[i].name,&yiban[i].score);} printf(" "); printf("添加之后的数据为: "); printf("学号—姓名—性别 "); for(i=0;i printf("%d—%s—%f ",yiban[i].num,yiban[i].name,yiban[i].score); return 0; }int shanchu() { int i,a; printf("请问你想删除第几个学生的信息: "); scanf("%d",&i); printf(" "); for(a=i;a yiban[a]=yiban[a+1]; s--; //删除之后总人数减一 printf("删除之后学生的信息为: "); for(a=0;a printf("%2d—%s—%f ",yiban[a].num,yiban[a].name,yiban[a].score); printf(" "); return 0; }int chaxun() {return 0;} int xiugai() {return 0;} int paixu() {return 0;} #include #include #include #include #define N 200 int input(struct Student stu[N]); void se(struct Student stu[N],int n); int load(struct Student stu[N]); void output(struct Student stu[N],int n); int insert(struct Student stu_se[],int n); void sort(struct Student stu_se[],int n); void find(struct Student stu_se[],int n); int delete_stu(struct Student stu_se[],int n); typedef struct Student {char num[20]; char name[20]; char ; int age; float score[3]; float tolscore; float e; }STU; int main() {int total=0,a; STU stu[N]; printf("☆☆☆☆☆学籍管理系统☆☆☆☆☆nn"); do{ printf("nn"); 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:se(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; }//("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 {scanf("%s",stu[i].num); scanf("%s",stu[i].name); scanf(" %c",&stu[i].); //%c前的空格用于接收上一个字符串后的空格、回车、制表符,etc scanf("%d",&stu[i].age); sum=0; for(j=0;j<3;j++) {scanf("%f",&stu[i].score[j]); sum+=stu[i].score[j]; }stu[i].tolscore=sum; stu[i].e=sum/3.0f; }return (n); }void se(struct Student stu[],int n) {FILE fp; int i; char filename[20]; printf("请输入文件名:"); scanf("%s",filename); if(strchr(filename,'.')==NULL) strcat(filename,".dat"); if((fp=fopen(filename,"wb"))==NULL) {printf("Cannot open this filen"); ("pause"); return; }fwrite(&n,sizeof(int),1,fp); for(i=0;i fwrite(&stu[i],sizeof(struct Student),1,fp); fclose(fp); printf("保存成功!"); ("pause"); return; }int load(struct Student stu_se[]) {FILE fp; int i,n; char filename[20]; printf("请输入要加载的文件名: "); //getchar(); scanf("%s",filename); // gets(filename); if(strchr(filename,'.')==NULL) strcat(filename,".dat"); if((fp=fopen(filename,"rb"))==NULL) {printf("Cannot open this filen"); ("pause"); return 0; }fread(&n,sizeof(int),1,fp); for(i=0;i fread(&stu_se[i],sizeof(struct Student),1,fp); fclose(fp); ("cls"); printf("文件加载成功!数据如下"); output(stu_se,n); return n; }void output(struct Student stu_se[],int n) {int i,j; // ("cls"); printf("n学号t姓名t性别t年龄t成绩一t成绩二t成绩三t总分t平均分n"); for(i=0;i {printf("%st",stu_se[i].num); printf("%st",stu_se[i].name); printf("%ct",stu_se[i].); printf("%dt",stu_se[i].age); for(j=0;j<3;j++) printf("%gt",stu_se[i].score[j]); printf("%gt",stu_se[i].tolscore); printf("%.2f",stu_se[i].e); putchar(10); }("pause"); return; }int insert(struct Student stu_se[],int n) {int i,j,num=0; float sum=0; struct Student s; char flag; if(n>200) {printf("空间已满,无法插入!n"); return 0; }// load(stu_se,n-1); do{ printf("n请依次输入学号、姓名、性别、年龄及三门课成绩n"); scanf("%s",s.num); scanf("%s",s.name); scanf(" %c",&s.); //%c前的空格用于接收上一个字符串后的空格、回车、制表符,etc scanf("%d",&s.age); for(j=0;j<3;j++) scanf("%f",&s.score[j]); sum=0; for(j=0;j<3;j++) sum+=s.score[j]; s.tolscore=sum; s.e=sum/3; num++; for(i=n+num-1;strcmp(stu_se[i-1].num,s.num)>0&&i>0;i--) stu_se[i]=stu_se[i-1]; stu_se[i]=s; printf("插入成功!"); fflush(stdin); do {printf("继续插入?(y/n)"); flag=getch(); }while(flag!='y'&&flag!='n'); }while(flag=='y'); ("pause"); //se(stu_se,n); return num; }void sort(struct Student stu_se[],int n) {int a,i,j; struct Student t; ("cls"); printf("n1-按序号排序n2-按成绩排序n请选择:"); scanf("%d",&a); while(a!=1&&a!=2) {printf("输入有误,请重新输入!n"); scanf("%d",&a); }//load(stu_se,n); if(a==1) {for(i=0;i for(j=0;j {if(strcmp(stu_se[j].num,stu_se[j+1].num)>0) {t=stu_se[j]; stu_se[j]=stu_se[j+1]; stu_se[j+1]=t; }} }else {for(i=0;i for(j=0;j {if(stu_se[j].e {t=stu_se[j]; stu_se[j]=stu_se[j+1]; stu_se[j+1]=t; }} }// se(stu_se,n); printf("排序成功!n"); output(stu_se,n); return; }void find(struct Student stu_se[],int n) {char ch; do{ int i,j,w=1; char search[20]; //load(stu_se,n); printf("请输入学生的学号或姓名"); scanf("%s",search); for(i=0;i {if(strcmp(stu_se[i].num,search)==0||strcmp(stu_se[i].name,search)==0) {printf("查找成功,该学生的信息为:n"); printf("%st",stu_se[i].num); printf("%st",stu_se[i].name); printf("%ct",stu_se[i].); printf("%dt",stu_se[i].age); for(j=0;j<3;j++) printf("%gt",stu_se[i].score[j]); printf("%gt",stu_se[i].tolscore); printf("%.2f",stu_se[i].e); 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_se[],int n) {int i,w=1; char search[20]; // load(stu_se,n); printf("n请输入要删除学生的姓名或学号n"); scanf("%s",search); for(i=0;i if(strcmp(stu_se[i].num,search)==0||strcmp(stu_se[i].name,search)==0) {w=0; break; }if(w) {printf("无此学生!n"); return 0; }for(;i stu_se[i]=stu_se[i+1]; printf("删除成功!n"); // se(stu_se,n-1); return 1; }之前随便写的 忘了有没有调试 有问题再私信找我 采纳哦~~ //这是我以前的课程设计, /【学生管理系统】/ //modify #include #include #include #include #include #define N 100 typedef struct student {int num; //学号,姓名,年龄,性别,出生年月,地址,电话, char name[18]; char ; int age; int y,m; int ; char add[30]; char mail[20]; int res; int stu; } SDate; int PassWord(); void Menu(); int Input_Cho(); //函数声明 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 cho); int Info_Add(SDate stu, int count); int main() {SDate stu[N]; int ret=0,res=0,cho=0; char ch; loop: ret=PassWord(); //登录函数 默认密码为admin if(!ret) {("cls"); printf("ntt密码错误或错误!n"); //默认密码:admin ("pause"); ("cls"); goto loop; }("cls"); e: Menu(); //菜单显示函数 printf("你的选择是?n"); scanf("%d",&ret); switch(ret) {case 1: cho=Input_Cho(); //InputCho()数据输入方式选择函数 if(cho==1) res=Info_Input(stu,res); //键盘输入函数 else if(cho==2) res=Input_file(stu); //文件读取函数 else {("cls"); goto e; }break; case 2: if(res==0) {("cls"); printf("没有数据输入,请重新选择!n"); goto e; }else Info_print(stu,res); break; case 3: if(res==0||res==1) {("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",&cho); res=Info_Del(stu, res, cho); break; case 7: printf("请输入需要修改的学号:"); scanf("%d",&cho); Info_Change(stu,res,cho); 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') {("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("nt n"); printf("tt: %d+%d=?n",a,b); printf("tt 为:"); scanf("%d",&d); if(c==d) return 1; else return 0; }int PassWord() //登录模块 {int i=0; char passWord[18]; char p[]="admin"; //默认密码设置 char ch; printf("t 欢迎使用学生信息管理系统n"); printf("n"); printf("tt用户名:Adminn"); printf("n"); printf("tt密码:"); while((ch=getch())!=13) {putchar(''); passWord[i]=ch; i++; }passWord[i]='0'; if(strcmp(p,passWord)==0) yanzheng(); else return 0; }void Menu() //菜单模块 {printf("t 欢迎使用学生信息管理系统n"); printf("nn"); printf(" tt1、学生信息录入tt n"); printf(" tt2、学生信息浏览tt n"); printf(" tt3、学生信息排序tt n"); printf(" tt4、学生信息查找tt n"); printf(" tt5、学生信息添加tt n"); printf(" tt6、学生信息删除tt n"); printf(" tt7、学生信息修改tt n"); printf(" tt8、学生信息保存tt n"); printf("tt9、退出ttt n"); printf("n"); }int Input_Cho() //数据输入方式选择 {int i; ("cls"); printf("t 欢迎使用学生信息管理系统n"); printf("tt1、键盘录入n"); printf("tt2、文件读取n"); printf("tt0、返回n"); printf("t你的选择是?"); scanf("%d",&i); return i; }int Info_Input(SDate stu,int count) //信息从键盘输入模块 {SDate p; p=stu; ("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->); printf("请输入该学生出生年月:n"); scanf("%d%d",&p->y,&p->m); printf("请输入该学生住址:n"); scanf("%s",p->add); printf("请输入该学生联系电话:n"); scanf("%d",&p->); printf("请输入该学生E-Mail:n"); scanf("%s",p->mail); count++; p++; ("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 %sn",&p->num,p->name,&p->,&p->age,&p->y,&p->m,&p->,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-Mailn"); for(p=stu; p printf("%d %s %c %d %d-%d %d %s %sn",p->num,p->name,p->,p->age,p->y,p->m,p->,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 fprintf(fp,"%d %s %c %d %d %d %d %s %sn",p->num,p->name,p->,p->age,p->y,p->m,p->,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 {for(j=0; j {if((stu[j].num)>(stu[j+1].num)) {p=stu[j]; stu[j]=stu[j+1]; stu[j+1]=p; }} }printf("排序完成!n"); }void Exit() //退出模块 {printf("谢谢使用!n"); exit(1); }void Info_Seach(SDate stu,int n) //查询模块,目前仅支持学号或姓名的精准查询 {int num,cho; char name[10]; int flag=-1,i; ("cls"); printf("请输入查询方式:t1、学号查询nt t2、名字查询n"); printf("您的选择是?"); scanf("%d",&cho); if(cho==1) {lab1: printf("请输入需要查找的学号:n"); scanf("%d",&num); for(i=0; i {if(num==stu[i].num) {flag=i; printf("%d %s %c %d %d-%d %d %s %sn",stu[i].num,stu[i].name,stu[i].,stu[i].age,stu[i].y,stu[i].m,stu[i].,stu[i].add,stu[i].mail); }} if(flag==-1) {printf("未找到!请重新选择n"); printf("1、返回继续查询n2、退出查询,返回主菜单n3、退出程序你的选择是?"); scanf("%d",&cho); if(cho==1) {("cls"); goto lab1; }if(cho==2) goto end; else Exit(); }} else if(cho==2) {lab2: printf("请输入需要查找的姓名:n"); scanf("%s",name); for(i=0; i if(strcmp(name,stu[i].name)==0) {flag=i; printf("%d %s %c %d %d-%d %d %s %sn",stu[i].num,stu[i].name,stu[i].,stu[i].age,stu[i].y,stu[i].m,stu[i].,stu[i].add,stu[i].mail); }if(flag==-1) {printf("您的输入有误!请重新选择n"); printf("tt1、返回继续查询ntt2、退出查询,返回主菜单ntt3、退出程序ttn你的选择是?"); scanf("%d",&cho); if(cho==1) {("cls"); goto lab2; }if(cho==2) goto end; else Exit(); }} end: ;} void Info_Change(SDate stu,int n,int Num) //信息修改模块 {int i; for(i=0; i if(stu[i].num==Num) {printf("请输入该学生姓名:n"); scanf("%s",stu[i].name); printf("请输入该学生年龄:n"); scanf("%d",&stu[i].age); getchar(); printf("请输入该学生性别:n"); scanf("%c",&stu[i].); printf("请输入该学生出生年月:n"); scanf("%d%d",&stu[i].y,&stu[i].m); printf("请输入该学生住址:n"); scanf("%s",stu[i].add); printf("请输入该学生联系电话:n"); scanf("%d",&stu[i].); printf("请输入该学生E-Mail:n"); scanf("%s",stu[i].mail); printf("学号为%d的同学信息修改完成!n",Num); }} int Info_Del(SDate stu, int n, int del) //信息删除模块 {int i,j; for(i=0; i if(stu[i].num==del) for(j=i; j stu[j]=stu[j+1]; n--; printf("删除成功!n"); return n; }int Info_Add(SDate stu,int count) //信息添加模块 {SDate p; ("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->); printf("请输入该学生出生年月:n"); scanf("%d%d",&p->y,&p->m); printf("请输入该学生住址:n"); scanf("%s",p->add); printf("请输入该学生联系电话:n"); scanf("%d",&p->); printf("请输入该学生E-Mail:n"); scanf("%s",p->mail); count++; p++; ("cls"); printf("请输入第%d个学生学号(输入0结束):n",count+1); scanf("%d",&p->num); }return count; } 参考如下学生信息管理系统的C源代码吧。 #include #include /定义学生结构体/ struct Student {char ID[20]; char Name[20]; float Mark1; float Mark2; float Mark3; float Average; }; /声明学生数组及学生数量/ struct Student students[1000]; int num=0; /求平均值/ float Avg(struct Student stu) {return (stu.Mark1+stu.Mark2+stu.Mark3)/3; }/通过学号返回数组下标/ int Student_SearchByIndex(char id[]) {int i; for (i=0;i {if (strcmp(students[i].ID,id)==0) {return i; }} return -1; }/通过姓名返回数组下标/ int Student_SearchByName(char name[]) {int i; for (i=0;i {if (strcmp(students[i].Name,name)==0) {return i; }} return -1; }/显示单条学生记录/ void Student_DisplaySingle(int index) {printf("%10s%10s%8s%8s%8s%10s ","学号","姓名","成绩","成绩","成绩","平均成绩"); printf("------------------------------------------------------------- "); printf("%10s%10s%8.2f%8.2f%8.2f%10.2f ",students[index].ID,students[index].Name, students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average); }/插入学生信息/ void Student_Insert() {while(1) {printf("请输入学号:"); scanf("%s",&students[num].ID); getchar(); printf("请输入姓名:"); scanf("%s",&students[num].Name); getchar(); printf("请输入成绩:"); scanf("%f",&students[num].Mark1); getchar(); printf("请输入成绩:"); scanf("%f",&students[num].Mark2); getchar(); printf("请输入成绩:"); scanf("%f",&students[num].Mark3); getchar(); students[num].Average=Avg(students[num]); num++; printf("是否继续?(y/n)"); if (getchar()=='n') {break; }} }/修改学生信息/ void Student_Modify() {//float mark1,mark2,mark3; while(1) {char id[20]; int index; printf("请输入要修改的学生的学号:"); scanf("%s",&id); getchar(); index=Student_SearchByIndex(id); if (index==-1) {printf("学生不存在! "); }else {printf("你要修改的学生信息为: "); Student_DisplaySingle(index); printf("-- 请输入新值-- "); printf("请输入学号:"); scanf("%s",&students[index].ID); getchar(); printf("请输入姓名:"); scanf("%s",&students[index].Name); getchar(); printf("请输入成绩:"); scanf("%f",&students[index].Mark1); getchar(); printf("请输入成绩:"); scanf("%f",&students[index].Mark2); getchar(); printf("请输入成绩:"); scanf("%f",&students[index].Mark3); getchar(); students[index].Average=Avg(students[index]); }printf("是否继续?(y/n)"); if (getchar()=='n') {break; }} }/删除学生信息/ void Student_Delete() {int i; while(1) {char id[20]; int index; printf("请输入要删除的学生的学号:"); scanf("%s",&id); getchar(); index=Student_SearchByIndex(id); if (index==-1) {printf("学生不存在! "); }else {printf("你要删除的学生信息为: "); Student_DisplaySingle(index); printf("是否真的要删除?(y/n)"); if (getchar()=='y') {for (i=index;i {students[i]=students[i+1];//把后边的对象都向前移动 }num--; }getchar(); }printf("是否继续?(y/n)"); if (getchar()=='n') {break; }} }/按姓名查询/ void Student_Select() {while(1) {char name[20]; int index; printf("请输入要查询的学生的姓名:"); scanf("%s",&name); getchar(); index=Student_SearchByName(name); if (index==-1) {printf("学生不存在! "); }else {printf("你要查询的学生信息为: "); Student_DisplaySingle(index); }printf("是否继续?(y/n)"); if (getchar()=='n') {break; }} }/按平均值排序/ void Student_SortByAverage() {int i,j; struct Student tmp; for (i=0;i {for (j=1;j {if (students[j-1].Average {tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; }} }} /显示学生信息/ void Student_Display() {int i; printf("%10s%10s%8s%8s%8s%10s ","学号","姓名","成绩","成绩","成绩","平均成绩"); printf("------------------------------------------------------------- "); for (i=0;i {printf("%10s%10s%8.2f%8.2f%8.2f%10.2f ",students[i].ID,students[i].Name, students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average); }} /将学生信息从文件读出/ void IO_ReadInfo() {FILE fp; int i; if ((fp=fopen("Database.txt","rb"))==NULL) {printf("不能打开文件! "); return; }if (fread(&num,sizeof(int),1,fp)!=1) {num=-1; }else {for(i=0;i {fread(&students[i],sizeof(struct Student),1,fp); }} fclose(fp); }/将学生信息写入文件/ void IO_WriteInfo() {FILE fp; int i; if ((fp=fopen("Database.txt","wb"))==NULL) {printf("不能打开文件! "); return; }if (fwrite(&num,sizeof(int),1,fp)!=1) {printf("写入文件错误! "); }for (i=0;i {if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1) {printf("写入文件错误! "); }} fclose(fp); }/主程序/ void main() {int cho; IO_ReadInfo(); while(1) {/主菜单/ printf(" ------ 学生成绩管理系统------ "); printf("1. 增加学生记录 "); printf("2. 修改学生记录 "); printf("3. 删除学生记录 "); printf("4. 按姓名查询学生记录 "); printf("5. 按平均成绩排序 "); printf("6. 退出 "); printf("请选择(1-6):"); scanf("%d",&cho); getchar(); switch(cho) {case 1: Student_Insert(); break; case 2: Student_Modify(); break; case 3: Student_Delete(); break; case 4: Student_Select(); break; case 5: Student_SortByAverage(); Student_Display(); break; case 6: exit(0); break; }IO_WriteInfo(); }}c语言学生管理系统,请把每行代码解释清楚,谢谢了
版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 836084111@qq.com 邮箱删除。