安徽科技学院 信网学院网络文化节 丁舒

程序设计
针对需求做如下设计:
(1)数据结构设计
假设学生学分管理程序中的信息结构是:学号(最多11个数字), 姓名(最多7个字符),班级(最多11个字符)
typedef struct student//定义学生学分结构
{ char num[11];//学号
char name[7];//姓名
char clas[10];//班级
int jichu,renwen,xuanxiu,zhuanye,shiyan;//基础,人文,选修,专业,实验学分
int sum;//学分总和
}STU;

(2)模块设计
本任务的主要算法是一组对学生学分管理的的操作函数,所以:
录入学分:
创造input函数,读入一个学生的全部信息,存到文件中,询问是否继续输入其它学生信息,若为n,则不输入,否则继续。

修改学分
在管理簿中用姓名name或学号num找到要查找的学生所在位置i,再输入新的学生学分信息,保存到文件中,修改完毕。

删除学分
在管理簿中用姓名name或学号num找到要查找的学生所在位置i,得到询问是否删除信息,回n是不删除,否则就删除并将此时结果保存到文件中,删除完毕。

查询学分
允许用学号,姓名,班级查询管理簿中的相应学生的学分信息。

对学分进行排序
允许根据总分从高到低排序也可以根据课程学分从低到高排序。

显示学分
即从头到尾打印出管理簿中的全部学生的信息。

(3)主程序结构
本任务的主程序结构是一个菜单,供选择,转入相应的子程序中:
1-录入学生学分
2-显示学生学分
3-查询学生学分
4-修改学生学分
5- 删除学生学分
6- 学生学分排序
7- 存入文件
8- 从文件读取
0- 退出

查询:
1-按学号查询
2-按姓名查询
3-按班级查询
0-退出
修改:
1-按学号修改
2-按姓名修改
0-退出
删除:
1-按学号删除
2-按姓名删除
0-退出
排序:
1-按课程从低到高 :
1-按基础课学分排序
2-按专业课学分排序
3-按选修课学分排序
4-按人文课学分排序
5-按实验课学分排序
0-退出
2-按总分从高到低
0-退出
源代码
#include <stdio.h>
#include"conio.h"
#include<stdlib.h>
#include <string.h>

typedef struct student//定义学生学分结构
{
char num[11];//学号
char name[7];//姓名
char clas[10];//班级
int jichu,renwen,xuanxiu,zhuanye,shiyan;//基础,人文,选修,专业,实验学分
int sum;//学分总和

}STU;

STU st[100];
static int n;

void menu();//菜单
void input();//输入函数
void print();//打印学分信息
void query();//查询学分信息
void modif();//修改学分信息
void del();//删除学分信息
void order();//按学分类别排序
void WriteInfo();//写入文件
void ReadInfo();//读取文件

/主函数/
void main()
{
int s;
do
{
menu();
printf("\n\t\t\t\t请选择:");
flushall();
scanf("%d",&s);
switch(s)
{
case 0:break;
case 1:input();
break;
case 2:print();
break;
case 3:query();
break;
case 4:modif();
break;
case 5:del();
break;
case 6:order();
break;
case 7:WriteInfo();
break;
case 8:ReadInfo();
break;
default:printf("\a\t\t\t\t选择无效!");
getch();
}
}while(s!=0);
getch();
}

/主菜单/
void menu()
{
system(“cls”);
printf("\t\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");
printf("\t\t\t\3\3 欢迎您的使用 \3\3\n");
printf("\t\t\t\2\2\2\2\2\2\2\2\2\2\2\2\2\2\2\2\2\2\2\2\2\2\2\2\n");
printf("\t\t\t\3\3 学生学分管理程序 \3\3\n");
printf("\t\t\t\3\3 1-录入学生学分 \3\3\n");
printf("\t\t\t\3\3 2-显示学生学分 \3\3\n");
printf("\t\t\t\3\3 3-查询学生学分 \3\3\n");
printf("\t\t\t\3\3 4-修改学生学分 \3\3\n");
printf("\t\t\t\3\3 5-删除学生学分 \3\3\n");
printf("\t\t\t\3\3 6-学生学分排序 \3\3\n");
printf("\t\t\t\3\3 7-信息存入文件 \3\3\n");
printf("\t\t\t\3\3 8-文件读取信息 \3\3\n");
printf("\t\t\t\3\3 0-退出 \3\3\n");
printf("\t\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");

}

/录入学分信息函数/
void input()
{
do
{
printf(“请输入学生信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课\n”);
scanf("%s%s%s%d%d%d%d%d",st[n].num,st[n].name,st[n].clas,&st[n].jichu,&st[n].zhuanye,&st[n].xuanxiu,&st[n].renwen,&st[n].shiyan);
WriteInfo();
n++;
printf("\n是否继续输入?(n退出,任意键继续):\n");
}while(getch()!=‘n’);

}

/显示学分信息函数/
void print()
{
int i;
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
for(i=0;i<n;i++)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].clas,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

getch();
}

/查询菜单/
void menu1()
{
system(“cls”);
printf("\t\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");
printf("\t\t\t\2\2\2\2\2\2\2\2\2\2查询模块\2\2\2\2\2\2\2\2\2\2\2\n");
printf("\t\t\t\3\3\3 1-按学号查询 \3\3\3\n");
printf("\t\t\t\3\3\3 2-按姓名查询 \3\3\3\n");
printf("\t\t\t\3\3\3 3-按班级查询 \3\3\3\n");
printf("\t\t\t\3\3\3 0-退出 \3\3\3\n");
printf("\t\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");

}

/按学号查询函数/
void query1()
{
char sn[11];
int i;
printf("\n请输入要查询的学号:");
scanf("%s",sn);
for(i=0;i<n;i++)
{
if(strcmp(sn,st[i].num)==0)
{
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].clas,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("\n按任意键继续\n");
break;
}
else continue;
}
if(i>=n)
printf("\n对不起!没有该学号,任意键继续");
getch();
}

/按姓名查询函数/
void query2()
{
char sn[7];
int i;
int k=0;
printf(“请输入要查询的姓名:”);
scanf("%s",sn);
for(i=0;i<n;i++)
{
if(strcmp(sn,st[i].name)0)
{
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].clas,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
k=k+1;
}
}
if(k
0)
printf("\n对不起!没有该姓名,任意键继续");
else printf(“按任意键继续”);
getch();
}

/按班级查询函数/
void query3()
{
char sn[10];
int i;
int k=0;
printf(“请输入要查询的班级:”);
scanf("%s",sn);
for(i=0;i<n;i++)
{
if(strcmp(sn,st[i].clas)0)
{
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].clas,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
k=k+1;
}
}
if(k
0)
printf("\n对不起!没有该班,任意键继续");
else printf(“按任意键继续”);
getch();
}

/查询函数/
void query()
{
int s;
do{
menu1();
printf("\n\t\t\t\t请选择:");
flushall();
scanf("%d",&s);
switch(s)
{
case 0:break;
case 1:query1();
break;
case 2:query2();
break;
case 3:query3();
break;
default:printf("\a\t\t\t\t选择无效!");
getch();
}

}while(s!=0);

getch();
}

/修改模块菜单/
void menu2()
{
system(“cls”);
printf("\t\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");
printf("\t\t\t\2\2\2\2\2\2\2\2\2\2修改模块\2\2\2\2\2\2\2\2\2\2\2\n");
printf("\t\t\t\3\3\3 1-按学号修改 \3\3\3\n");
printf("\t\t\t\3\3\3 2-按姓名修改 \3\3\3\n");
printf("\t\t\t\3\3\3 0-退出 \3\3\3\n");
printf("\t\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");

}

/按学号修改学分信息/
void modif1()
{
char sn[11];
int i;
int k=0;
printf(“请输入要修改学分学生的学号:”);
scanf("%s",sn);
for(i=0;i<n;i++)
{
if(strcmp(sn,st[i].num)0)
{
k=k+1;
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].clas,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf(“是否修改?(任意键确认,n取消)\n”);
if(getche()!=‘n’)
{
printf(“请输入学生学分信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课\n”);
scanf("%s%s%s%d%d%d%d%d",st[i].num,st[i].name,st[i].clas,&st[i].jichu,&st[i].zhuanye,&st[i].xuanxiu,&st[i].renwen,&st[i].shiyan);
printf(“按任意键继续”);
}
break;
}
}
if(k
0)
printf("\n对不起!没有该学号,任意键继续");
getch();
}

/按姓名修改学分信息/
void modif2()
{
char sn[7];
int i;
int k=0;
printf(“请输入要修改学分学生的姓名:”);
scanf("%s",sn);
for(i=0;i<n;i++)
{
if(strcmp(sn,st[i].name)==0)
{
k=k+1;
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].clas,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf(“是否修改?(任意键确认,n取消)\n”);

  if(getche()!='n')
   {
printf("请输入学生学分信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课\n");
scanf("%s%s%s%d%d%d%d%d",st[i].num,st[i].name,st[i].clas,&st[i].jichu,&st[i].zhuanye,&st[i].xuanxiu,&st[i].renwen,&st[i].shiyan);
  printf("按任意键继续");
   }

break;
}

}
if(k==0)
printf("\n对不起!没有该姓名,任意键继续");
getch();
}

/修改模块函数/
void modif()
{
int s;
do{
menu2();
printf("\n\t\t\t\t请选择:");
flushall();
scanf("%d",&s);
switch(s)
{ case 0:break;
case 1:modif1();
break;
case 2:modif2();
break;
default:printf("\a\t\t\t\t选择无效!");
getch();
}

}while(s!=0);

getch();
}

/删除模块菜单/
void menu3()
{
system(“cls”);
printf("\t\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");
printf("\t\t\t\2\2\2\2\2\2\2\2\2\2查询模块\2\2\2\2\2\2\2\2\2\2\2\n");
printf("\t\t\t\3\3\3 1-按学号删除 \3\3\3\n");
printf("\t\t\t\3\3\3 2-按姓名删除 \3\3\3\n");
printf("\t\t\t\3\3\3 0-退出 \3\3\3\n");
printf("\t\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");

}

/按学号删除学分信息/
void del1()
{
char sn[11];
int i,j;
int k=0;
printf(“请输入要删除学分学生的学号:”);
scanf("%s",sn);
for(i=0;i<n;i++)
{
if(strcmp(sn,st[i].num)0)
{
k=k+1;
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].clas,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf(“是否删除(任意键确认,n取消)”);
if(getche()!=‘n’)
{if(i!=n-1)
for(j=i;j<n-1;j++)
st[j]=st[j+1];
n–;
printf("\n该记录已删除");
getch();
break ;
}
}
else continue;
}
if(k
0)
printf("\n对不起!没有该学号,任意键继续");
getch();
}

/按姓名删除学分信息/
void del2()
{
char sn[7];
int i,j;
int k=0;
printf("\n请输入要删除学分学生的姓名:\n");
scanf("%s",sn);
for(i=0;i<n;i++)
{
if(strcmp(sn,st[i].name)0)
{
k=k+1;
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].clas,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("\n是否删除(任意键确认,n取消)\n");
if(getche()!=‘n’)
{if(i!=n-1)
for(j=i;j<n-1;j++)
st[j]=st[j+1];
n–;
printf("\n该记录已删除");
getch();
break ;
}
}
else continue;
}
if(k
0)
printf("\n对不起!没有该姓名,任意键继续");
getch();
}

/删除函数/
void del()
{
int s;
do{
menu3();
printf("\n\t\t\t\t 请选择:");
flushall();
scanf("%d",&s);
switch(s)
{ case 0:break;
case 1:del1();
break;
case 2:del2();
break;
default:printf("\a\t\t\t\t选择无效!");
getch();
}
}while(s!=0);
getch();
}

/排序模块菜单/
void menu4()
{
system(“cls”);
printf("\t\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");
printf("\t\t\t\2\2\2\2\2\2\2\2\2\2\2\2查询模块\2\2\2\2\2\2\2\2\2\2\2\2\2\n");
printf("\t\t\t\3\3\3 1-按课程从低到高 \3\3\3\n");
printf("\t\t\t\3\3\3 2-按总分从高到低 \3\3\3\n");
printf("\t\t\t\3\3\3 0-退出 \3\3\3\n");
printf("\t\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");

}

/课程类排序模块菜单/
void menu5()
{
system(“cls”);
printf("\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");
printf("\t\t\2\2\2\2\2\2\2\2\2\2\2按课程从低到高排序模块\2\2\2\2\2\2\2\2\2\2\n");
printf("\t\t\3\3\3 1-按基础课学分排序 \3\3\3\n");
printf("\t\t\3\3\3 2-按专业课学分排序 \3\3\3\n");
printf("\t\t\3\3\3 3-按选修课学分排序 \3\3\3\n");
printf("\t\t\3\3\3 4-按人文课学分排序 \3\3\3\n");
printf("\t\t\3\3\3 5-按实验课学分排序 \3\3\3\n");
printf("\t\t\3\3\3 0-退出 \3\3\3\n");
printf("\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");

}

/按基础学分排序/
void jichu()
{
int i,j;
STU t;
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
if(st[i].jichu<st[i+1].jichu)
{
t=st[i];
st[i]=st[i+1];
st[i+1]=t;
}
}
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
for(i=n-1;i>=0;i–)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].clas,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
getch();
}

/按专业学分排序/
void zhuanye()
{
int i,j;
STU t;
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
if(st[i].zhuanye<st[i+1].zhuanye)
{
t=st[i];
st[i]=st[i+1];
st[i+1]=t;
}
}
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
for(i=n-1;i>=0;i–)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].clas,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
getch();
}

/按选修学分排序/
void xuanxiu()
{
int i,j;
STU t;
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
if(st[i].xuanxiu<st[i+1].xuanxiu)
{
t=st[i];
st[i]=st[i+1];
st[i+1]=t;
}
}
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
for(i=n-1;i>=0;i–)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].clas,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
getch();
}

/按人文学分排序/
void renwen()
{
int i,j;
STU t;
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
if(st[i].renwen<st[i+1].renwen)
{
t=st[i];
st[i]=st[i+1];
st[i+1]=t;
}
}
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
for(i=n-1;i>=0;i–)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].clas,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
getch();
}

/按实验学分排序/
void shiyan()
{
int i,j;
STU t;
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
if(st[i].shiyan<st[i+1].shiyan)
{
t=st[i];
st[i]=st[i+1];
st[i+1]=t;
}
}
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
for(i=n-1;i>=0;i–)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].clas,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
getch();
}

/按课程类学分排序函数/
void order1()
{
int s;
do{
menu5();
printf("\n\t\t\t\t请选择:");
flushall();
scanf("%d",&s);
switch(s)
{
case 0:break;
case 1:jichu();
break;
case 2:zhuanye();
break;
case 3:xuanxiu();
break;
case 4:renwen();
break;
case 5:shiyan();
break;
default:printf("\a\t\t\t\t选择无效!");
getch();
}
}while(s!=0);
getch();
}

/按总学分排序函数/
void order2()
{
int i,j;
STU t;
for(i=0;i<n;i++)
st[i].sum=st[i].jichu+st[i].renwen+st[i].zhuanye+st[i].xuanxiu+st[i].shiyan;
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
if(st[i].sum<st[i+1].sum)
{
t=st[i];
st[i]=st[i+1];
st[i+1]=t;
}
}
printf("\n学号\t 姓名\t 班级\t基础课\t专业课\t选修课\t人文课\t实验课\t总分\n");
for(i=0;i<n;i++)
printf("%7s %5s %5s %4d\t%4d\t%4d\t%4d\t%4d\t%4d\n",st[i].num,st[i].name,st[i].clas,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan,st[i].sum);
getch();
}

/排序函数/
void order()
{
int s;
do{
menu4();
printf("\n\t\t\t\t请选择:");
flushall();
scanf("%d",&s);
switch(s)
{
case 0:break;
case 1:order1();
break;
case 2:order2();
break;
default:printf("\a\t\t\t\t选择无效!");
getch();
}
}while(s!=0);
getch();
}

/从文件读取/
void ReadInfo()
{

FILE * fp=fopen("xuefen.txt","r");
if(!fp)
{
	return;
}

//将记录条数读取
fread(&n,1,4,fp);
//读取全部内容
fread(&st,1,sizeof(STU)*n,fp);
fclose(fp);

printf("\a\t\t\t\t读取成功!");
     getch();

}

/写入文件/
void WriteInfo()
{
FILE * fp=fopen(“xuefen.txt”,“wb”);
if(!fp)
{
return;
}
fwrite(&n,1,4,fp);
fwrite(&st,1,sizeof(STU)*n,fp);
fclose(fp);

	printf("\a\t\t\t\t写入成功!");
     getch();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值