帮忙设计一个C语言的学生信息管理系统

2024-12-13 12:33:54
推荐回答(5个)
回答1:

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "conio.h"

struct subject{ //科目信息结构体
float Chinese; //语文
float Math; //数学
float English; //英语
};

struct student{
int no; //学号
char name[20]; //姓名
char sex; //性别
char address[20]; //地址
char telephone[20];//电话
subject score; //3门科目的成绩
float avg; //3门平均成绩
}stud[50]; //结构体数组

int count=0; //计数变量,记录学生人数

void add(){ //增加学生信息函数
student a; //临时结构体变量a
char x,j; //Yes or No输入字符变量

//循环输入学生信息
for(int i=0;i<50;i++){
system("cls"); //清屏函数
int t=0;
printf("请输入学生的学号:");
scanf("%d",&a.no);

//寻找学号是否已存在
for(int k=0;k if(stud[k].no==a.no){
t=1;
}
}

//存在与否,分别输出
if(t==1)
printf("输入的学号已存在,请重新输入\n");
else{
printf("请输入学生的姓名:");
scanf("%s",a.name);
printf("请输入学生的性别(m代表男,f代表女):");
scanf("%c",&a.sex);
scanf("%c",&a.sex);
printf("请输入学生的地址:");
scanf("%s",a.address);
printf("请输入学生的电话:");
scanf("%s",a.telephone);
printf("请输入学生的语文成绩:");
scanf("%f",&a.score.Chinese);
printf("请输入学生的数学成绩:");
scanf("%f",&a.score.Math);
printf("请输入学生的英语成绩:");
scanf("%f",&a.score.English);
a.avg=(a.score.Chinese+a.score.English+a.score.Math)/3;

//判定是否要增加该记录
printf("确定要增加该记录吗?(y/n)");
scanf("%c",&x);
scanf("%c",&x);
if(x=='y'){
stud[count]=a;
count++;
}
}

//判定是否要继续增加记录
printf("要继续增加记录吗?(y/n)");
scanf("%c",&j);
scanf("%c",&j);
if(j=='n')
break;
}
printf("\n按任意键返回主菜单:");
getch(); //从键盘接收任意一个字符就返回
}

void show(){ //显示所有学生信息函数
system("cls");
//循环显示
for(int i=0;i printf("学号:%-8d姓名:%-16s性别:%c\n",stud[i].no,stud[i].name,stud[i].sex);
printf("地址:%s\n电话:%s\n",stud[i].address,stud[i].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[i].score.Chinese,
stud[i].score.Math,stud[i].score.English,stud[i].avg);
printf("---------------------------------------------------------------------\n");
}
printf("\n按任意键返回主菜单:");
getch();
}

void sort(){ //根据学生的学号由小到大进行排序
system("cls");
//冒泡排序法
for(int i=0;i for(int j=0;j if(stud[j].no>stud[j+1].no){
student t=stud[j];
stud[j]=stud[j+1];
stud[j+1]=t;
}
}
}
printf("排序已完成,按任意键返回主菜单:");
getch();
}

void query1(){ //根据学号查询并显示单个学生信息
int x; //输入学生学号整型变量
char k; //Yes or No输入字符变量
while(true){
system("cls");
int t=-1; //要查询的学生学号所对应的数组下标,-1代表在数组中没对应下标
printf("请输入要查询的学生学号:");
scanf("%d",&x);

//循环寻找结构体数组中符合变量x的数据,并把该数据所在的下标值赋给变量t
for(int i=0;i if(stud[i].no==x)
t=i;
}

//判定信息是否存在,分别输出
if(t==-1)
printf("您所查询的学生信息不存在,");
else{
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[t].no,stud[t].name,stud[t].sex);
printf("地址:%s\n电话:%s\n",stud[t].address,stud[t].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[t].score.Chinese,
stud[t].score.Math,stud[t].score.English,stud[t].avg);
printf("---------------------------------------------------------------------\n");
}

//判定是否要继续查询
printf("是否继续查询?(y/n)");
scanf("%c",&k);
scanf("%c",&k);
if(k=='n')
break;
}
printf("\n按任意键返回主菜单:");
getch();
}

void query2(){ //根据姓名查询并显示单个学生信息
char x[20]; //输入学生姓名字符串变量
char k; //Yes or No输入字符变量
while(true){
system("cls");
student a[50]; //要查询的学生姓名所对应的数组下标,-1代表在数组中没对应下标
int t=0;
printf("请输入要查询的学生姓名:");
scanf("%s",x);

//循环寻找结构体数组中符合变量x的数据,并把该数据所在的下标值赋给变量t
for(int i=0;i if(strcmp(stud[i].name,x)==0){
a[t]=stud[i];
t++;
}
}

//判定信息是否存在,分别输出
if(t==0)
printf("您所查询的学生信息不存在,");
else{
for(int i=0;i printf("学号:%-8d姓名:%-16s性别:%c\n",a[i].no,a[i].name,a[i].sex);
printf("地址:%s\n电话:%s\n",a[i].address,a[i].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",a[i].score.Chinese,
a[i].score.Math,a[i].score.English,a[i].avg);
printf("---------------------------------------------------------------------\n");
}
}

//判定是否要继续查询
printf("是否继续查询?(y/n)");
scanf("%c",&k);
scanf("%c",&k);
if(k=='n')
break;
}
printf("\n按任意键返回主菜单:");
getch();
}

void good(){ //显示平均成绩和单科成绩最高的学生资料
system("cls");

//寻找平均成绩中的最高值
float max1=stud[0].avg;
for(int i=1;i if(stud[i].avg>max1)
max1=stud[i].avg;

//输出平均成绩中最高值的学生信息
for(int i=0;i if(max1==stud[i].avg){
printf("平均成绩最高的学生信息:\n\n");
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[i].no,stud[i].name,stud[i].sex);
printf("地址:%s\n电话:%s\n",stud[i].address,stud[i].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[i].score.Chinese,
stud[i].score.Math,stud[i].score.English,stud[i].avg);
printf("---------------------------------------------------------------------\n");
}
}

//寻找语文成绩中的最高值
float max2=stud[0].score.Chinese;
for(int i=1;i if(stud[i].score.Chinese>max2)
max2=stud[i].score.Chinese;

//输出语文成绩中最高值的学生信息
for(int i=0;i if(max2==stud[i].score.Chinese){
printf("语文成绩最高的学生信息:\n\n");
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[i].no,stud[i].name,stud[i].sex);
printf("地址:%s\n电话:%s\n",stud[i].address,stud[i].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[i].score.Chinese,
stud[i].score.Math,stud[i].score.English,stud[i].avg);
printf("---------------------------------------------------------------------\n");
}
}

//寻找数学成绩中的最高值
float max3=stud[0].score.Math;
for(int i=1;i if(stud[i].score.Math>max3)
max3=stud[i].score.Math;

//输出数学成绩中最高值的学生信息
for(int i=0;i if(max3==stud[i].score.Math){
printf("数学成绩最高的学生信息:\n\n");
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[i].no,stud[i].name,stud[i].sex);
printf("地址:%s\n电话:%s\n",stud[i].address,stud[i].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[i].score.Chinese,
stud[i].score.Math,stud[i].score.English,stud[i].avg);
printf("---------------------------------------------------------------------\n");
}
}

//寻找英语成绩中的最高值
float max4=stud[0].score.English;
for(int i=1;i if(stud[i].score.English>max4)
max4=stud[i].score.English;

//输出英语成绩中最高值的学生信息
for(int i=0;i if(max4==stud[i].score.English){
printf("英语成绩最高的学生信息:\n\n");
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[i].no,stud[i].name,stud[i].sex);
printf("地址:%s\n电话:%s\n",stud[i].address,stud[i].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[i].score.Chinese,
stud[i].score.Math,stud[i].score.English,stud[i].avg);
printf("---------------------------------------------------------------------\n");
}
}
printf("\n按任意键返回主菜单:");
getch();
}

void update(){
int x; //输入学生学号整型变量
student a; //临时结构体变量a
char k,j; //Yes or No输入字符变量

while(true){
system("cls");
int t=-1; //要查询的学生学号所对应的数组下标,-1代表在数组中没对应下标
printf("请输入要修改的学生学号:");
scanf("%d",&x);

//循环寻找结构体数组中符合变量x的数据,并把该数据所在的下标值赋给变量t
for(int i=0;i if(stud[i].no==x)
t=i;
}

//判定信息是否存在,分别输出
if(t==-1)
printf("您所要修改的学生信息不存在,");
else{
//输出要修改学生的原信息
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[t].no,stud[t].name,stud[t].sex);
printf("地址:%s\n电话:%s\n",stud[t].address,stud[t].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[t].score.Chinese,
stud[t].score.Math,stud[t].score.English,stud[t].avg);
printf("---------------------------------------------------------------------\n");

//判定是否要修改
printf("确定要修改该记录吗?(y/n)");
scanf("%c",&k);
scanf("%c",&k);

//确定要修改后,输入新信息
if(k=='y'){
printf("请输入新的学生的学号:");
scanf("%d",&a.no);
printf("请输入新的学生的姓名:");
scanf("%s",a.name);
printf("请输入新的学生的性别:");
scanf("%c",&a.sex);
scanf("%c",&a.sex);
printf("请输入新的学生的地址:");
scanf("%s",a.address);
printf("请输入新的学生的电话:");
scanf("%s",a.telephone);
printf("请输入新的学生的语文成绩:");
scanf("%f",&a.score.Chinese);
printf("请输入新的学生的数学成绩:");
scanf("%f",&a.score.Math);
printf("请输入新的学生的英语成绩:");
scanf("%f",&a.score.English);
a.avg=(a.score.Chinese+a.score.English+a.score.Math)/3;
stud[t]=a;
printf("修改成功,");
}
}

//判定是否继续
printf("是否继续修改?(y/n)");
scanf("%c",&j);
scanf("%c",&j);
if(j=='n')
break;
}
printf("\n按任意键返回主菜单:");
getch();
}

void del(){
int x; //输入学生学号整型变量
char k,j; //Yes or No输入字符变量
while(true){
system("cls");
int t=-1; //要查询的学生学号所对应的数组下标,-1代表在数组中没对应下标
printf("请输入要删除的学生学号:");
scanf("%d",&x);

//循环寻找结构体数组中符合变量x的数据,并把该数据所在的下标值赋给变量t
for(int i=0;i if(stud[i].no==x)
t=i;
}

//判定信息是否存在,分别输出
if(t==-1)
printf("您所要删除的学生信息不存在,");
else{
//输出要删除学生的原信息
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[t].no,stud[t].name,stud[t].sex);
printf("地址:%s\n电话:%s\n",stud[t].address,stud[t].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[t].score.Chinese,
stud[t].score.Math,stud[t].score.English,stud[t].avg);
printf("---------------------------------------------------------------------\n");

//判定是否删除
printf("确认要删除吗?(y/n)");
scanf("%c",&k);
scanf("%c",&k);

//确定要删除后,删除该信息
if(k=='y'){
for(int i=t;i stud[i]=stud[i+1];
printf("删除成功,");
count--;
}
}

//判定是否继续
printf("是否继续删除?(y/n)");
scanf("%c",&j);
scanf("%c",&j);
if(j=='n')
break;
}
printf("\n按任意键返回主菜单:");
getch();
}

void grt(){
system("cls");
printf("\t\t\t顾韧霆制作\n\t\t\t2008年12月13日\n");
printf("\n按任意键返回主菜单:");
getch();
}

void grt1()
{
int choice=0; //保存用户输入的选择项
do{
system("cls"); //清屏函数
printf("\t----------------学生信息管理系统----------------\n\n");
printf("\t\t在菜单中选择以下的操作类型\n");
printf("\t\t1.增加记录\n\t\t2.显示所有学生信息\n\t\t3.信息排序\n\t\t4.根据学号查询单个学生信息\n\t\t5.根据姓名查询单个学生信息\n");
printf("\t\t6.平均成绩和单科成绩最高的学生资料\n\t\t7.修改记录\n\t\t8.删除记录\n\t\t9.退出程序\n\t\t0.制作人\n");
printf("\t\t请输入你的选择:");
scanf("%d",&choice);
switch(choice)
{
case 1:
add();
break;
case 2:
show();
break;
case 3:
sort();
break;
case 4:
query1();
break;
case 5:
query2();
break;
case 6:
good();
break;
case 7:
update();
break;
case 8:
del();
break;
case 0:
grt();
break;
}
}while(choice!=9);
}

void main()
{
char x[10];
printf("\t----------------学生信息管理系统----------------\n\n");
for(int i=3;i>0;i--){
printf("\t\t\t请输入密码:");
scanf("%s",&x);
if(strcmp(x,"123456")==0){
grt1();
break;
}
else
printf("\t\t\t输入错误,你还有%d次机会\n",i-1);
}

}

回答2:

这么大的系统一般都要给RMB做的。这个太费功夫了。

回答3:

#include
#include
#define N 100
struct students{
int num;
char name[10];
int score;
}s[N]={{1,"a",3},{2,"b",4},{3,"c",1}};

int m=3;

int f(int i)
{
int j;
int flag=0;
for(j=0;j{
if(s[i].num==s[j].num)
{
printf("已有该学号,请检查后重新录入\n");
flag=1;
break;
}
}
return flag;
}

void input()
{
int i;
void menu();
// system("cls");
printf("输入待录入的学生数:");
scanf("%d",&m);
while(m>N)
{
printf("个数太多,重新输入,推出请输入0\n");
scanf("%d",&m);
if(m==0)
menu();
}
printf("输入学生信息(学号,姓名,分数)\n");
for(i=0;i{
printf("请输入学号:");
scanf("%d",&s[i].num);
while(i>0&&f(i)==1)
{
printf("请重新输入学号:");
scanf("%d",&s[i].num);
}
printf("请输入名字:");
scanf("%s",s[i].name);
printf("请输入成绩:");
scanf("%d",&s[i].score);
}
printf("输入完毕\n");
printf("即将回到菜单\n");
// system("pause");
menu();
}

void sort()
{
void menu();
int i,j,k;
int temp;
char a[10];
for(i=0;i{
k=i;
for(j=i+1;jif(s[k].scorek=j;
if(k!=i)
{
temp=s[i].num;
s[i].num=s[k].num;
s[k].num=temp;
temp=s[i].score;
s[i].score=s[k].score;
s[k].score=temp;
strcpy(a,s[i].name);
strcpy(s[i].name,s[k].name);
strcpy(s[k].name,a);

}
}
printf("排序完毕\n");
menu();
}

void add()
{
void menu();
int n;
int i;
printf("请输入要添加的个数");
scanf("%d",&n);
while((n+m)>N)
{
printf("个数太多,重新输入,推出请输入0\n");
scanf("%d",&n);
if(n==0)
menu();
}
printf("输入学生信息(学号,姓名,分数)\n");
for(i=0;i{
printf("请输入学号:");
scanf("%d",&s[m+i].num);
while(f(m+i)==1)
{
printf("请重新输入学号:");
scanf("%d",&s[m+i].num);
}
printf("请输入名字:");
scanf("%s",s[m+i].name);
printf("请输入成绩:");
scanf("%d",&s[m+i].score);
}
m=m+n;
printf("输入完毕\n");
printf("即将回到菜单\n");
menu();
}

void del()
{
void menu();
int num;
int i;
int j;
printf("请输入要删除的学号:");
scanf("%d",&num);
for(i=0;i{
if(s[i].num==num)
{
for(j=i+1;j{
s[j-1].num=s[j].num;
s[j-1].score=s[j].score;
strcpy(s[j-1].name,s[j].name);
}
printf("删除完毕\n");
return;
}
}
printf("不存在该学号\n");
menu();
}

void print()
{
void menu();
int i;
printf("当前学生信息如下:\n");
printf("学号 姓名 成绩\n");
for(i=0;i{
printf("%d",s[i].num);
printf("%7s",s[i].name);
printf("%9d\n",s[i].score);
}
menu();
}

void shut()
{
printf("谢谢使用本系统。");
// system("pause");
// exit(0);
}

void menu()
{
int key;
// 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("请输入key;");
scanf("%d",&key);
switch(key)
{
case(1):
input();
break;
case(2):
sort();
break;
case(3):
add();
break;
case(4):
del();
break;
case(5):
print();
break;
case(6):
shut();
break;
default :
printf("你输入有误。");
break;
}
}

void main()
{
menu();
}

回答4:

小力,你太笨了!!!!!

回答5:

我有的你要不要,用数组很搓的,有最大数值的限制,没有弹性,现在都是用指针来按要求分配,并用数据结构存储,我保证我的界面肯定比你说的要好多了。百度hi我 或者发邮件我 huafeng86999@163.com