问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用c语言编写学生信息管理系统

发布网友 发布时间:2022-05-06 03:07

我来回答

2个回答

热心网友 时间:2022-06-28 13:32

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define N 200
int input(struct Student stu[N]);
void save(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_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[20];
char name[20];
char sex;
int age;
float score[3];
float tolscore;
float ave;
}STU;
int main()
{
int total=0,a;
STU stu[N];
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[i].num);
scanf("%s",stu[i].name);
scanf(" %c",&stu[i].sex); //%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].ave=sum/3.0f;
}

return (n);
}

void save(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 file\n");
system("pause");
return;
}
fwrite(&n,sizeof(int),1,fp);
for(i=0;i<n;i++)
fwrite(&stu[i],sizeof(struct Student),1,fp);
fclose(fp);
printf("保存成功!");
system("pause");
return;
}
int load(struct Student stu_save[])
{
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 file\n");
system("pause");
return 0;
}
fread(&n,sizeof(int),1,fp);
for(i=0;i<n;i++)
fread(&stu_save[i],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[i].num);
printf("%s\t",stu_save[i].name);
printf("%c\t",stu_save[i].sex);
printf("%d\t",stu_save[i].age);
for(j=0;j<3;j++)
printf("%g\t",stu_save[i].score[j]);
printf("%g\t",stu_save[i].tolscore);
printf("%.2f",stu_save[i].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[j]);
sum=0;
for(j=0;j<3;j++)
sum+=s.score[j];
s.tolscore=sum;
s.ave=sum/3;
num++;
for(i=n+num-1;strcmp(stu_save[i-1].num,s.num)>0&&i>0;i--)
stu_save[i]=stu_save[i-1];
stu_save[i]=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[j].num,stu_save[j+1].num)>0)
{
t=stu_save[j];
stu_save[j]=stu_save[j+1];
stu_save[j+1]=t;
}
}
}
else
{
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(stu_save[j].ave<stu_save[j+1].ave)
{
t=stu_save[j];
stu_save[j]=stu_save[j+1];
stu_save[j+1]=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[20];
//load(stu_save,n);
printf("请输入学生的学号或姓名");
scanf("%s",search);
for(i=0;i<n;i++)
{
if(strcmp(stu_save[i].num,search)==0||strcmp(stu_save[i].name,search)==0)
{
printf("查找成功,该学生的信息为:\n");
printf("%s\t",stu_save[i].num);
printf("%s\t",stu_save[i].name);
printf("%c\t",stu_save[i].sex);
printf("%d\t",stu_save[i].age);
for(j=0;j<3;j++)
printf("%g\t",stu_save[i].score[j]);
printf("%g\t",stu_save[i].tolscore);
printf("%.2f",stu_save[i].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[20];
// load(stu_save,n);
printf("\n请输入要删除学生的姓名或学号\n");
scanf("%s",search);
for(i=0;i<n;i++)
if(strcmp(stu_save[i].num,search)==0||strcmp(stu_save[i].name,search)==0)
{
w=0;
break;
}
if(w)
{
printf("无此学生!\n");
return 0;
}
for(;i<n-1;i++)
stu_save[i]=stu_save[i+1];
printf("删除成功!\n");
// save(stu_save,n-1);
return 1;
}

之前随便写的 忘了有没有调试 有问题再私信找我 采纳哦~~追问我看了你的程序了,运行起来有点问题,可能是我方法不对,你能说下方法么,还有就是能成绩那个可以只添加一个成绩么,年龄那个改为生日行么

追答我定义的是成绩是数组 你要是只想一个的话把数组删了就可以了 年龄改生日 要注意数据类型的问题 年龄就是int 就行了 生日的话如果19990101这样输入 会产生数据溢出的问题 所以生日最好改成char类型的

热心网友 时间:2022-06-28 13:32

//这是我以前的课程设计,


声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
饿了么红包兑换码怎么获得 饿了么红包兑换码获得教程 2014.11.26.十点五七分出生,五行里缺什么? 农历2019年12月20日10点57分钟是什么命? 22:57是几点 10点57分用英语怎么说用两种方法说 空调的热风怎么调才暖和 多萝西计划的意思是什么 “SETI”是什么意思? 宇宙中是否存在地外文明就一直不能得到实践的检验。”这句话是什么意 ... 在爱奇艺上看到减肥广告说是老中医的孙女,让喝减肥汤药?可信吗? 美国十大高智商电影 联通宽带路由器HG110B怎么重置 联通光纤路由器怎么重置 中国联通的 镇安辣豆腐乳的做法 花呗说发律师函的短信是什么样的 请问辣腐乳的制作方法 对方发来律师函该如何应对? 今天收到这个短信,就支付宝逾期了,我打电话问了,也协商了,人家说没发,省呗没有逾期,问一下这个短信_百度问一问 省呗律师函到户籍所在地怎么处理 ...发的朋友圈 并且显示“朋友仅展示一个月的朋友圈”这是为什么?_百 ... 能天使高达模型问题 mg命运,飞翼零,能天使,量子,异端,独角兽,帮我选一下!谢!(不要给我推荐其他的) MG能天使高达模型的问题 MG能天使高达Trans-Am 高达rg能天使,rg强袭自由,mg艾比安,要买些什么颜色的马克笔 高达模型两个mg的强自和pg的掉毛哪个更难更划算? 万代有哪些hg是超大hg 高达工具问题 万代高达MG 能天使豪华版应该用什么上色 关于万代模型板件的问题求大神帮助 吗这个多音字有几个读音分别怎么组词 么的读音有几种,这几种怎么组词 用c语言设计学生学籍管理系统 组词对吗拼音应该怎么教 用C语言设计一个学生的学籍管理系统 &quot;和&quot; 还有什么读音(组词呀) mysql5.0安装时,点完finishi这个选项之后,没有配置这个选项是怎么回事,大神求救 嘉实基金300etf联接何时分红 苹果手机指南针坐标准吗 有赞和微店哪个好 有赞微店和口袋微店的异同 微商平台选择:有赞,微店和拍拍微店的区别 你的 PHP MySQL 库版本 5.0.51a 和你的 MySQL 服务器版本 5.1.49 不同。 macbook air开机时出现一个鼠标然后就没反应了,一直黑屏,几乎所有办法都试过,但都不行 怎么剪辑音乐片段 多久才能看到孕囊 mysql 5.0免安装版本默认的用户名和密码多少 服务器支持MySQL 5.1 提示mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $ 请问这是什么问题? 中国的哪座城市讲韩语? 中国哪座城市会讲韩语?