下文仅代表个人对c语言的见解。 ?
一、本程序的功能要求
1.录入学生信息和成绩
2.查找学生信息和
3.增加学生信息
4.修改学生信息
5.删除学生信息
6.打印学生成绩排名
7.打印出优秀和不及格学生
8.退出程序
二、程序设计的思想
我们的思路要对它有一个大概的轮廓,轮廓有了,我们再一步一步来实现它,首先需要定义一个学生结构体类型,里面包含着我们所需的各种学生信息和各科成绩。
主函数里定义结构体数组,管理好多个学生信息,也可以把他定义为全局变量。定义一个总人数的全局变量在最上方,int count=0;
然后再定义自定义函数来实现各个功能模块,再定义一个主菜单函数实现登录界面和作为实现其他功能的纽带,主函数采用do-while和switch结构。
三、函数功能介绍
以下主要介绍了重要的函数功能,部分函数省略: void BubbleSort(stu *s) ? ? ?冒泡排序,对学生平均分进行排序,并确定个人的排名 void Input(stu *s) ? ?实现输入学生的信息和成绩 void Search(stu *s) ? 实现查找学生信息 void Alter(stu *s) ? ?实现修改学生信息 void Delete(stu *s) ? 实现删除学生信息 void Add(stu *s) ? ?实现增加学生信息 int Menu() ? 实现登录主菜单界面 void Rank(stu *s) ? ? ? 实现按名次从高到低输出学生成绩排名 void Statistics(stu *s)? ? 实现输出优秀和不及格的学生信息
学生结构体
typedef struct student { ? ? int num; ? ? ? ? ? char name[10];? ? ? int pol; ? ? ?? ? ? int Eng; ? ? ?? ? ? int Math; ? ? ? ? ? int aver; ? ?? ? ? int ran; ? ?? }stu;
四、完整源代码
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAX 100
int count = 0;
typedef struct student
{
int num;
char name[10];
int pol;
int Eng;
int Math;
int aver;
int ran;
}stu;
void BubbleSort(stu *s)
{
int i, j, a;
stu t;
for (i = 1; i<count; i++)
{
a = 0;
for (j = count; j>i; j--)
{
if (s[j].aver>s[j-1].aver)
{
t=s[j];
s[j]=s[j-1];
s[j-1]=t;
a=1;
}
}
if (a==0)
break;
}
s[1].ran=1;
for(i=2;i<=count;i++)
{
if(s[i].aver<s[i-1].aver)
s[i].ran=i;
else if(s[i].aver==s[i-1].aver)
s[i].ran=s[i-1].ran;
else
printf("\nerror!\n");
}
}
void Input(stu *s)
{
int i;
printf("请输入要录入学生信息的人数:");
scanf("%d", &count);
for (i = 1; i <= count; i++)
{
printf("请输入第%d个学生信息!\n", i);
printf("学号:");
scanf("%d", &s[i].num);
printf("姓名:");
scanf("%s", s[i].name);
printf("政治:");
scanf("%d", &s[i].pol);
printf("英语:");
scanf("%d", &s[i].Eng);
printf("高数:");
scanf("%d", &s[i].Math);
s[i].aver = (s[i].pol + s[i].Eng + s[i].Math ) / 3;
}
BubbleSort(s);
printf("\n\t录入学生信息完毕!\a\n");
printf("正在拼命回到主菜单!\n");
system("pause");system("cls");
}
void Output(stu *s)
{
int i;
printf("\n\n");
printf("-----------------------------------------------------------\n");
printf("\t名次 学号 姓名 政治 英语 高数 平均分\n\n");
for (i = 1; i<=count; i++)
printf("\t %2d%6d %7s %3d %3d %3d %3d\n", s[i].ran , s[i].num, s[i].name, s[i].pol, s[i].Eng, s[i].Math,s[i].aver);
printf("\n-----------------------------------------------------------\n");
printf("\t\t一共有%d个学生信息!\n\n", count);system("pause");system("cls");
}
int Order_n(stu *s, int x)
{
int i = count;
s[0].num = x;
while (s[i].num != x)
i--;
return i;
}
int Order_m(stu *s, char *c)
{
int i=count;
strcpy(s[0].name, c);
while (strcmp(s[i].name, c))
i--;
return i;
}
void OutSingle(stu *s, int n)
{
printf("\n\t以下是该学生的信息!\n");
printf("\t名次 学号 姓名 政治 英语 高数 平均分\n\n");
printf("\t %2d%6d %7s %3d %3d %3d %3d\n\n", s[n].ran , s[n].num, s[n].name, s[n].pol, s[n].Eng, s[n].Math,s[n].aver);
}
int Submenu()
{
int n;
printf("\n\t---------------------------\n");
printf("\n\t 1--按学号查找");
printf("\n\t 2--按姓名查找");
printf("\n\t 0--返回");
printf("\n\n\t---------------------------");
do {
printf("\n请输入菜单号(0-2):");
scanf("%d", &n);
getchar();
} while (n<0 || n>2);
return n;
}
void SubAlter(stu *s,int n)
{
stu g;
int p;
printf("请输入以下要修改该学生的信息!");
printf("\n学号:");
scanf("%d",&g.num);
printf("名字:");
scanf("%s",g.name);
printf("政治:");
scanf("%d",&g.pol);
printf("英语:");
scanf("%d",&g.Eng);
printf("高数:");
scanf("%d",&g.Math);
g.aver = (g.pol+g.Eng+g.Math)/3;
printf("确定修改请输入1,撤销请输入0!\n");
scanf("%d",&p);
if(p){
s[n]=g;
printf("\n\t修改成功!\n");
}
else
printf("\n\t已撤销!\n");
}
void Search(stu *s)
{
int a, n, z;
char c[10];
a=Submenu();
switch(a)
{
case 1:
printf("请输入要查找学生的学号:");
scanf("%d", &n);
z = Order_n(s, n);
if (z)
OutSingle(s, z);
else
printf("\n\t无法找到您所查找的学生,查找失败!\n");
printf("\n正在拼命回到主菜单!\n");
system("pause");system("cls");break;
case 2:
printf("请输入要查找学生的姓名:");
scanf("%s", c);
z = Order_m(s, c);
if(z)
OutSingle(s, z);
else
printf("\n\t无法查找您所查找的学生,查找失败!\n");
printf("\n正在拼命回到主菜单!\n");
system("pause");system("cls");break;
default:
printf("\n正在返回主菜单\n");system("pause");system("cls");
}
}
void Alter(stu *s)
{
int a,z,n;
char c[10];
printf("\n请先查找到该学生后再进行修改!");
a=Submenu();
switch(a){
case 1:
printf("请输入要修改学生的学号:");
scanf("%d", &n);
z=Order_n(s, n);
if(z){
OutSingle(s,z);
SubAlter(s, z);
}
else
printf("\t无法找到你所查找的学生!");
printf("\n正在拼命回到主菜单!\n");
system("pause");system("cls");break;
case 2:
printf("请输入要修改学生的姓名:");
scanf("%d", c);
z=Order_m(s, c);
if(z){
OutSingle(s,z);
SubAlter(s, z);
}
else
printf("\t无法找到你所查找的学生!");
printf("\n正在拼命回到主菜单!\n");
system("pause");system("cls");break;
default:
printf("\n正在返回主菜单\n");system("pause");
}
BubbleSort(s);
}
void Delete(stu *s)
{
int a,z,n,i,p;
char c[10];
printf("\n请先查找到该学生后再进行删除!");
a=Submenu();
switch(a){
case 1:
printf("请输入要删除学生的学号:");
scanf("%d", &n);
z=Order_n(s, n);
if(z){
OutSingle(s,z);
printf("\n\t确认删除请输入1,撤销请输入0!\n");
scanf("%d",&p);
if(p){
for(i=z;i<count;i++)
s[i]=s[i+1];
count--;
printf("\n\t删除成功!\n");
}
else
printf("\n\t已撤销!\n");
}
else
printf("\n\t无法找到你所查找的学生,删除失败!\n");
printf("\n正在拼命回到主菜单!\n");
system("pause");system("cls");break;
case 2:
printf("请输入要修改学生的姓名:");
scanf("%d", c);
z=Order_m(s, c);
if(z){
OutSingle(s,z);
printf("\n\t确认删除请输入1,撤销请输入0!\n");
scanf("%d",&p);
if(p){
for(i=z;i<count;i++)
s[i]=s[i+1];
count--;
printf("\n\t删除成功!\n");
}
else
printf("\n\t已撤销!\n");
}
else
printf("\n\t无法找到你所查找的学生,删除失败!\n");
printf("\n正在拼命回到主菜单!\n");
system("pause");system("cls");break;
default:
printf("\n正在返回主菜单\n");system("pause");system("cls");
}
BubbleSort(s);
}
void Add(stu *s)
{
int n, i, a;
printf("请输入增加学生信息的人数:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
a=count+i;
printf("请输入第%d个学生信息:\n", i);
printf("学号:");
scanf("%d", &s[a].num);
printf("姓名:");
scanf("%s", s[a].name);
printf("政治:");
scanf("%d", &s[a].pol);
printf("英语:");
scanf("%d", &s[a].Eng);
printf("高数:");
scanf("%d", &s[a].Math);
s[a].aver=(s[a].pol+s[a].Eng+s[a].Math)/3;
}
count+=n;
BubbleSort(s);
printf("\n\t增加学生信息完毕!\n");
printf("\n正在拼命回到主菜单!\n");
system("pause");system("cls");
}
void Rank(stu *s)
{
stu *r = s;
BubbleSort(r);
Output(r);
}
void Statistics(stu *s)
{
stu su[99],fail[99];
int i,a=0,b=0;
for(i=1;i<=count;i++)
{
if(s[i].aver>=80){
su[a]=s[i];
a++;
}
if(s[i].aver<60){
fail[b]=s[i];
b++;
}
}
printf("\n\n\t下列名单为优秀同学!\n");
printf("-----------------------------------------\n");
printf("\t学号 姓名\n\n");
for(i=0;i<a;i++)
printf(" %6d %7s\n",su[i].num,su[i].name);
printf("-----------------------------------------\n");
printf("\n\t一共有%d位同学成绩优秀\n",a);
printf("\n\t下列名单为不及格同学!\n");
printf("-----------------------------------------\n");
printf("\t学号 姓名\n\n");
for(i=0;i<b;i++)
printf(" %6d %7s\n",fail[i].num,fail[i].name);
printf("-----------------------------------------\n");
printf("\n\t一共有%d位同学不及格\n",b);
printf("\n\t增加学生信息完毕!\n");
printf("\n正在拼命回到主菜单!\n");
system("pause");system("cls");
}
void Thanks()
{
int i,j;
printf("\n\t程序正在退出!\n");
for(i=1;i<=9;i++)
{
for(j=9;j>=i;j--)
printf(" ");
for(j=1;j<=i;j++)
printf("谢谢");
printf("\n");
}
}
int Menu()
{
int n;
printf("\n --------------------------------------");
printf("\n * 主菜单 *");
printf("\n * 1——录入学生信息 *");
printf("\n * 2——查找学生信息 *");
printf("\n * 3——修改学生信息 *");
printf("\n * 4——删除学生信息 *");
printf("\n * 5——增加学生信息 *");
printf("\n * 6——打印学生成绩排名 *");
printf("\n * 7——统计优秀和不及格学生 *");
printf("\n * 0——退出程序 *");
printf("\n --------------------------------------");
do {
printf("\n请输入菜单号(0-7):");
scanf("%d", &n);
getchar();
} while (n<0 || n>7);
return n;
}
main(){
stu s[MAX];
int a;
printf("\n请输入程序登入口令!\n");
do{
printf("\n\t口令:");
scanf("%d",&a);
if(a!=6)
printf("\n输入口令错误!\n");
}while(a!=6);
printf("高校学生成绩统计程序正在启动...\n");
do {
a=Menu();
switch (a)
{
case 1:
Input(s);
break;
case 2:
Search(s);
break;
case 3:
Alter(s);
break;
case 4:
Delete(s);
break;
case 5:
Add(s);
break;
case 6:
Rank(s);
break;
case 7:
Statistics(s);
break;
case 0:
Thanks();
}
} while (a);
}
以上就是本文的全部内容 如有错误可以联系我,由于时间有限,编者能力有限,错误在所难免。
|