学生成绩管理系统
一,设计要求:
1.平台:Windows 10 ,Dev-C++5.11
2.语言:C++,面向过程
3.主要功能:
设计一个学生成绩管理系统。此系统可包括以下模块:
(1) 系统欢迎界面;
(2) 用户登录(密码验证)功能,默认密码请设为学号后两位;
(3) 功能菜单选择界面;
(4) 学生成绩信息的录入;
(5) 学生成绩信息的查询(按学号或姓名查询);
(6) 学生成绩信息的编辑(含修改与删除);
(7) 学生成绩信息的统计(含最高分、最低分、平均分、排序);
(8) 学生信息的显示(全部显示);
二、总体设计
整个程序运用《C语言程序设计基础教程》这本书的所学内容,设计一个学生成绩查询系统,其内容包括学生成绩的录入、查询、编辑、统计等功能,若用户选择错误则要有错误提示,并返回主菜单要求用户重新选择。主函数main()调用Welcome()和Password()函数,Welcome()函数是欢迎界面函数,里面有学院、专业、班级、学号、姓名、日期等信息,Password()函数是输入密码函数,若输入密码正确,则进入下一个菜单,若不正确,则会显示重新输入密码。
三、详细设计
#include<stdio.h>//头文件
#include<string.h>
#include<conio.h>
#include<stdlib.h>
struct Score//全局变量
{
char num[12];//学号
char name[10];//姓名
int cs;//C成绩
int gs;//高数成绩
int ys;//英语成绩
int sum;//三科成绩总分
}stu[100];
int count=0;//总人数设为全局变量并赋初值为0
int mark_sort=0;//标识是否已排序
void Welcome(),Password(),Menu(),Input(),Query(),Query_num(),Query_name(),Edit(),Edit_edit(),Edit_del(),Statistic(),Sta_max(),
Sta_min(),Sta_avg(),Sta_sort(),Output();//要用到的函数
void Welcome()// 欢迎界面函数
{
system("title 程序设计课程设计"); //设置会话的窗口标题为“程序设计课程设计”
system("color F5"); //设置背景色为亮白色,字体颜色为紫色
system("cls"); //清屏
printf("\n\n\t\t|----------------------------------------|\n");
printf("\t\t|----------------------------------------|\n");
printf("\t\t| 《程序设计》课程设计 |\n");
printf("\t\t| 学生成绩管理系统 |\n");
printf("\t\t|----------------------------------------|\n");
printf("\t\t|----------------------------------------|\n");
printf("\n\t\t 程序设计:**学院\n");
printf("\n\t\t 专业:******\n");
printf("\n\t\t 班级:20X\n");
printf("\n\t\t 学号:000000000\n");
printf("\n\t\t 姓名:XXX\n");
printf("\n\t\t 2021.03.15\n");
}
void Password()//输入密码
{
char mm[20];
printf("\n\n\n");
printf("\t\t 请输入登录密码:");
gets(mm);
if(strcmp(mm,"00")==0)//判断两个字符串是否相等(不能直接用“==”,只能用字符串比较函数)
Menu();
else
{
printf("\n");
printf("\t\t 输入密码有误,请重新输入......\n");
Password();
}
}
void Menu()//菜单
{
system("cls");
printf("\n\n\n\t\t---欢迎使用本系统,请选择下列菜单---\n\n");
printf("\t\t\t1.学生成绩信息录入\n");
printf("\t\t\t2.学生成绩信息查询\n");
printf("\t\t\t3.学生成绩信息编辑\n");
printf("\t\t\t4.学生成绩信息统计\n");
printf("\t\t\t5.学生成绩信息显示\n");
printf("\t\t\t6.退出系统\n");
printf("\t\t************************************\n");
printf("\t\t\t请选择菜单选项1-6:");
switch(getche())
{
case '1':system("cls");Input();break;
case '2':system("cls");Query();break;
case '3':system("cls");Edit();break;
case '4':system("cls");Statistic();break;
case '5':system("cls");Output();break;
case '6':printf("\n\t\t按任意键退出系统....\n");getch();exit(0);break;
default:printf("\n\n\t\t\t输入错误,请重新输入1~6:\n");getch();Menu();
}
printf("\n\t\t按任意键退出系统....\n");getch();exit(0);
}
void Input()//录入
{
int i,n;
char str1[4],str2[12];
printf("\n\n\t\t\t---学生信息录入---\n");
printf("\n请输入待录入的学生人数:");
scanf("%d",&count);
for(i=0;i<count;i++)
{
itoa(i+1,str1,10);
if(i<9)
{
strcpy(str2,"202099900");
strcat(str2,str1);//将1位数序号的字符串连接到"202099900"后
}
else if(i<99)
{
strcpy(str2,"202099990");
strcat(str2,str1);//将2位数序号的字符串连接到"202099990"后
}
else
{
strcpy(str2,"2020699999");
strcat(str2,str1);//将3位数序号的字符串连接到"202099999"后
}
strcpy(stu[i].num,str2);//形成每位同学各自学号
}
for(i=0;i<count;i++)
{
printf("\n--------------------\n");
printf("输入学号为%s同学的相关信息:\n",stu[i].num);
printf("姓名:");
scanf("\n");
gets(stu[i].name);
printf("C成绩:");
scanf("%d",&stu[i].cs);
printf("高数成绩:");
scanf("%d",&stu[i].gs);
printf("英语成绩:");
scanf("%d",&stu[i].ys);
}
for(i=0;i<count;i++)//计算每位学生的成绩总分
{
stu[i].sum=stu[i].cs+stu[i].gs+stu[i].ys;
}
printf("\n--------------------\n");
printf("已录入的全体学生信息:\n");
printf("学号 姓名\tC成绩\t高数成绩 英语成绩 三门成绩总分\n");
for(i=0;i<count;i++)
{
printf("%s",stu[i].num);
printf(" %s",stu[i].name);
printf("\t%3d",stu[i].cs);
printf("\t%3d",stu[i].gs);
printf("\t %3d",stu[i].ys);
printf(" %3d\n",stu[i].sum);
}
printf("\n\n按任意键返回主菜单...");
getch();
Menu();
}
void Query()//查询
{
system("cls");
printf("\n\n\n\t\t\t---学生信息查询---\n\n");
printf("\t\t\t 1.按学号查询\n");
printf("\t\t\t 2.按姓名查询\n");
printf("\t\t\t 3.返回主菜单\n");
printf("\t\t************************\n");
printf("\t\t\t请选择菜单选项1-3:");
switch(getche())
{
case '1':system("cls");Query_num();break;
case '2':system("cls");Query_name();break;
case '3':system("cls");Menu();break;
default:printf("\n\n选择的菜单选项有误,按任意键返回...");getch();Query();
}
}//调用Query_num()、Query_name()等函数
void Query_num()//按学号查找
{
char find_num[12];
int i,mark=0;
printf("\n\n\t\t************************\n");
printf("\t\t 请输入要查询的学号:");
scanf("\n");
gets(find_num);
for(i=0;i<count;i++)
{
if(strcmp(stu[i].num,find_num)==0)
{
mark=1;
break;
}
}
if(mark==1)//以下程序段判断是否存在
{
printf("\n--------------------\n");
printf("已查到学生信息:\n");
printf("学号 姓名\tC成绩\t高数成绩 英语成绩 三门成绩总分\n");
printf("%s",stu[i].num);
printf(" %s",stu[i].name);
printf("\t%3d",stu[i].cs);
printf("\t%3d",stu[i].gs);
printf("\t %3d",stu[i].ys);
printf(" %3d\n",stu[i].sum);
}
else
printf("\n查无此学生!\n");
printf("\n\n按任意键返回...");
getch();
Query();
}
void Query_name()//按姓名
{
char find_name[10];
int i,mark=0;
printf("\n\n\t\t************************\n");
printf("\t\t 请输入要查询的姓名:");
scanf("\n");
gets(find_name);
for(i=0;i<count;i++)
{
if(strcmp(stu[i].name,find_name)==0)
{
mark=1;break;
}
}
if(mark==1)
{
printf("\n--------------------\n");
printf("已查到学生信息:\n");
printf("学号 姓名\tC成绩\t高数成绩 英语成绩 三门成绩总分\n");
printf("%s",stu[i].num);
printf(" %s",stu[i].name);
printf("\t%3d",stu[i].cs);
printf("\t%3d",stu[i].gs);
printf("\t %3d",stu[i].ys);
printf(" %3d\n",stu[i].sum);
}
else
printf("\n查无此学生!\n");
printf("\n\n按任意键返回...");
getch();
Query();
}
void Edit()//编辑
{
system("cls");
printf("\n\n\n\t\t\t---学生信息编辑---\n\n");
printf("\t\t\t1.学生信息修改\n");
printf("\t\t\t2.学生信息删除\n");
printf("\t\t\t3.返回主菜单\n");
printf("\t\t************************\n");
printf("\t\t\t请选择菜单选项1-3:");
switch(getche())
{
case '1':system("cls");Edit_edit();break;
case '2':system("cls");Edit_del();break;
case '3':system("cls");Menu();break;
default:printf("\n\n选择的菜单选项有误,按任意键返回...");getch();Edit();
}//调用Edit_edit()、 Edit_del() 等函数
}
void Edit_edit()//修改
{
char find_num[12],yn;
int i,mark=0;
printf("\n\n\t\t ************************\n");
printf("\t\t 请输入要修改的学生学号:");
scanf("\n");
gets(find_num);
for(i=0;i<count;i++)//以下程序段完成按学号查询
{
if(strcmp(stu[i].num,find_num)==0)
{
mark=1;break;
}
}
if(mark==1)//以下程序段判断是否存在
{
printf("\n--------------------\n");
printf("待修改的学生信息:\n");
printf("学号 姓名\tC成绩\t高数成绩 英语成绩 三门成绩总分\n");
printf("%s",stu[i].num);
printf(" %s",stu[i].name);
printf("\t%3d",stu[i].cs);
printf("\t%3d",stu[i].gs);
printf("\t %3d",stu[i].ys);
printf(" %3d\n",stu[i].sum);
printf("\n--------------------\n");
printf("确认修改以上学生信息(y/n)?");
yn=getche();
if(yn=='y'||yn=='Y')
{
printf("\n\n--------------------\n");
printf("修改学号为%s同学的相关信息:\n",stu[i].num);
printf("姓名:");
scanf("\n");
gets(stu[i].name);
printf("C成绩:");
scanf("%d",&stu[i].cs);
printf("高数成绩:");
scanf("%d",&stu[i].gs);
printf("英语成绩:");
scanf("%d",&stu[i].ys);
stu[i].sum=stu[i].cs+stu[i].gs+stu[i].ys;//计算三门成绩总分
printf("\n--------------------");
printf("\n已完成信息修改,按任意键返回...");
getch();
Edit();
}
else
Edit();
}
else
{
printf("\n--------------------");
printf("\n查无此学生!\n");
}
printf("\n\n按任意键返回...");
getch();
Edit();
}
void Edit_del()//删除学生信息
{
char find_num[12],yn;
int i,mark=0;
printf("\n\n\t\t ************************\n");
printf("\t\t 请输入要删除的学生学号:");
scanf("\n");
gets(find_num);
for(i=0;i<count;i++)
{
if(strcmp(stu[i].num,find_num)==0)
{
mark=1;break;
}
}
if(mark==1)
{
printf("\n\n--------------------\n");
printf("待删除的学生信息:\n");
printf("学号 姓名\tC成绩\t高数成绩 英语成绩 三门成绩总分\n");
printf("%s",stu[i].num);
printf(" %s",stu[i].name);
printf("\t%3d",stu[i].cs);
printf("\t%3d",stu[i].gs);
printf("\t %3d",stu[i].ys);
printf(" %3d\n",stu[i].sum);
printf("\n--------------------\n");
printf("确认删除以上学生信息(y/n)?");
yn=getche();
if(yn=='y'||yn=='Y')
{
if(count>1)
{
int j;//以下程序段完成学生人数超过1的信息删除,即将当前位置的后续学生信息依次替换前一位学生
for(j=i;j<=count;j++)
{
strcpy(stu[j].num,stu[j+1].num);
strcpy(stu[j].name,stu[j+1].name);
stu[j].cs=stu[j+1].cs;
stu[j].gs=stu[j+1].gs;
stu[j].ys=stu[j+1].ys;
}
}
count--;//学生人数减1
printf("\n\n--------------------");
if(count==0)
printf("\n已完成信息删除,且没有任何学生信息,按任意键返回...");
else
printf("\n已完成信息删除,按任意键返回...");
getch();
Edit();
}
else
Edit();
}
else
{
printf("\n--------------------");
printf("\n查无此学生!\n");
}
printf("\n\n按任意键返回...");
getch();
Edit();
}
void Statistic()//统计
{
system("cls");
printf("\n\n\n\t\t\t---学生信息统计---\n\n");
printf("\t\t\t1.最高分\n");
printf("\t\t\t2.最低分\n");
printf("\t\t\t3.平均分\n");
printf("\t\t\t4.排序\n");
printf("\t\t\t5.返回主菜单\n");
printf("\t\t************************\n");
printf("\t\t\t请选择菜单选项1-5:");
switch(getche())
{
case'1':Sta_max();break;
case'2':Sta_min();break;
case'3':Sta_avg();break;
case'4':Sta_sort();break;
case'5':Menu();break;
default:printf("\n\n选择的菜单选项有误,按任意键返回...");getch();Menu();
}
}
void Sta_max()//统计最高分
{
int i,max,max_at=0;
max=stu[0].sum;
for(i=1;i<count;i++)
{
if(stu[i].sum>max)
{
max=stu[i].sum;
max_at=i;
}
}
printf("\n\n--------------------\n");
printf("三门成绩总分最高分的学生信息:\n");
printf("学号 姓名\tC成绩\t高数成绩 英语成绩 三门成绩总分\n");
printf("%s",stu[max_at].num);
printf(" %s",stu[max_at].name);
printf("\t%3d",stu[max_at].cs);
printf("\t%3d",stu[max_at].gs);
printf("\t %3d",stu[max_at].ys);
printf(" %3d\n",stu[max_at].sum);
printf("\n\n按任意键返回...");
getch();
Statistic();
}
void Sta_min()//统计最低分
{
int i,min,min_at=0;
min=stu[0].sum;
for(i=1;i<count;i++)
{
if(stu[i].sum<min)
{
min=stu[i].sum;
min_at=i;
}
}
printf("\n\n--------------------\n");
printf("三门成绩总分最低分的学生信息:\n");
printf("学号 姓名\tC成绩\t高数成绩 英语成绩 三门成绩总分\n");
printf("%s",stu[min_at].num);
printf(" %s",stu[min_at].name);
printf("\t%3d",stu[min_at].cs);
printf("\t%3d",stu[min_at].gs);
printf("\t %3d",stu[min_at].ys);
printf(" %3d\n",stu[min_at].sum);
printf("\n\n按任意键返回...");
getch();
Statistic();
}
void Sta_avg()//统计平均分
{
int i;
float cs_avg=0,gs_avg=0,ys_avg=0;
for(i=0;i<count;i++)
{
cs_avg+=stu[i].cs;
gs_avg+=stu[i].gs;
ys_avg+=stu[i].ys;
}
cs_avg/=count;
gs_avg/=count;
ys_avg/=count;
printf("\n\n--------------------\n");
printf("全体学生平均分信息:\n");
printf("C平均分:%.2f\n",cs_avg);
printf("高数平均分:%.2f\n",gs_avg);
printf("英语平均分:%.2f\n",ys_avg);
printf("\n\n按任意键返回...");
getch();
Statistic();
}
void Sta_sort()//按降序排序
{
struct Score temp;
int i,j,max,max_at;
char str[20];
mark_sort=1;
for(i=0;i<count-1;i++)//选择排序法
{
max=stu[i].sum;
max_at=i;
for(j=i+1;j<count;j++)
{
if(stu[j].sum>max)
{
max=stu[j].sum;
max_at=j;
}
}
if(i!=max_at)
{
temp=stu[i];
stu[i]=stu[max_at];
stu[max_at]=temp;
/*
strcpy(str,stu[i].num);
strcpy(stu[i].num,stu[max_at].num);
strcpy(stu[i].num,str);
strcpy(str,stu[i].name);
strcpy(stu[i].name,stu[max_at].name);
strcpy(stu[i].name,str);
t=stu[i].cs;stu[i].cs=stu[max_at].cs;stu[max_at].cs=t;
t=stu[i].gs;stu[i].cs=stu[max_at].gs;stu[max_at].gs=t;
t=stu[i].ys;stu[i].ys=stu[max_at].ys;stu[max_at].ys=t;
t=stu[i].sum;stu[i].sum=stu[max_at].sum;stu[max_at].sum=t;
*/
}
}
printf("\n\n--------------------\n");
printf("三门成绩总分从高到低排列的全体学生信息:\n");
printf("学号 姓名\tC成绩\t高数成绩 英语成绩 三门成绩总分\n");
for(i=0;i<count;i++)
{
printf("%s",stu[i].num);
printf(" %s",stu[i].name);
printf("\t%3d",stu[i].cs);
printf("\t%3d",stu[i].gs);
printf("\t %3d",stu[i].ys);
printf(" %3d\n",stu[i].sum);
}
printf("\n\n按任意键返回...");
getch();
Statistic();
}
//学生信息显示函数
void Output()
{
int i;
printf("\n\n--------------------\n");
if(mark_sort==1)
printf("因已排序,三门成绩总分从高到低排列的全体学生信息:\n");
else
printf("全体学生信息(未排序):\n");
printf("学号 姓名\tC成绩\t高数成绩 英语成绩 三门成绩总分\n");
for(i=0;i<count;i++)
{
printf("%s",stu[i].num);
printf(" %s",stu[i].name);
printf("\t%3d",stu[i].cs);
printf("\t%3d",stu[i].gs);
printf("\t %3d",stu[i].ys);
printf(" %3d\n",stu[i].sum);
}
printf("\n\n按任意键返回...");
getch();
Menu();
}
int main()//主函数
{
Welcome();//调用欢迎界面函数
Password();//调用菜单界面函数
return 0;
}