📄 kao7.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include<string.h> //提供字符串比较函数:strcmp()
#include<fstream.h> //文件控制头函数
//*********************学生成绩信息定义**************************
typedef struct examine
{
float math;
float english;
float suanfa;
float huibian;
float dianlu;
float tiyu;
float pingjun;
float total;
}Exam;
//**********************学生课程信息定义**************************
typedef struct course
{
char mon1[10],mon2[10],mon3[10],mon4[10],mon5[10];
char tues1[10],tues2[10],tues3[10],tues4[10],tues5[10];
char wed1[10],wed2[10],wed3[10],wed4[10],wed5[10];
char thur1[10],thur2[10],thur3[10],thur4[10],thur5[10];
char fri1[10],fri2[10],fri3[10],fri4[10],fri5[10];
}Cour;
//*********************学生学籍信息定义**************************
typedef struct stud
{
long xuehao;
char name[10];
char sex[5];
char xibie[10];
char banji[10];
char address[40];
char tel[10];
char sushe[10];
Exam chengji; //内嵌声明成绩信息结构体
Cour kecheng; //内嵌声明课程信息结构体
struct stud * next;
}Stud;
Stud *head; //定义链表头结点指针(全局变量)
Stud *r,*R,*w; //定义从链表任意段控制输出的指针(全局变量)
FILE *fi1,*fi2; //声明文件操作变量指针(全局变量)
//******************************函数声明部分***************************************
void caidan(); //
void caidan1();
void caidan2();
void caidan3();
void caidan4();
void caidan5();
void caidan6(); //六个菜单函数
void xuehaoDel(long x); //按学号删除函数
void nameDel(char x[]); //按姓名删除函数
void shuru(); //输入基本信息和成绩函数
void shuru1(); //输入课表信息函数
void inser(long b); //录入,插入新学生信息函数
void print(); //
void print2();
void print3();
void print4(); //四个控制打印信息函数
void output();
void output1();
void output2(); //三类信息的打印函数
void paixu(); //按学号排序函数
void paixu1(); //按考试成绩排序函数
void find(long b); //按学号查找函数
void find1(char b[10]); //按姓名查找函数
void open(); //打开信息库文件输出信息函数
void close(); //保存信息到信息库文件函数
void gengxin(long b); //更新学生信息函数
int tongji(); //统计学生信息个数函数
//*********************主函数定义**************************
void main() //主函数开始
{
char name[10];
int choose,choose1,n,menu=1; //定义三个控制循环的变量
long m; //定义用来做学号查询的变量
open(); //打开信息库文件载入学生信息
do //循环操作控制
{
if(menu==1) //判断是否重新显示主菜单
caidan(); //调用功能菜单函数,显示菜单项。
menu=1; //默认从个子功能模块跳出后自动显示主菜单
printf("请选择>>");
scanf("%ld",&choose);
switch(choose)
{
case 1: //进入录入,插入新学生信息功能模块
system("cls"); //自动清屏函数(系统提供)
caidan3(); //调用子菜单
do //连续插入新信息循环控制
{
printf("请输入新学生学号:\n");
scanf("%ld",&m);
inser(m); //调用插入新的学生信息的函数;
print(); //显示插入的新学生信息
printf("\n继续插入请输入1返回总菜单输入0:");
scanf("%d",&m);
}while(m==1);
system("cls"); //自动清屏函数(系统提供)
break;
case 2: //进入按学号升序排序输出信息功能模块
system("cls"); ////自动清屏函数(系统提供)
caidan4(); //调用输出哪类信息子菜单
n=tongji(); //调用统计函数
paixu(); //调用按学号排序函数
do //控制,实现循环查询功能
{
printf("\n请选择>>");
scanf("%d",&choose1);
switch(choose1)
{
case 1:
printf("一共有%d个学生,信息如下:\n",n);
print2(); //调用打印学生基本信息函数
break;
case 2:
printf("一共有%d个学生,成绩信息如下:\n",n);
print3(); //调用打印学生成绩信息函数
break;
case 3:
printf("一共有%d个学生,信息如下:\n",n);
print4(); //调用打印学生课程信息函数
break;
default:
printf("\n选择错误,请重新选择!\n");
break;
}
}while(choose1!=0);
system("cls");//自动清屏函数(系统提供)
menu=1;
break;
case 3: //进入学生考试成绩排名功能模块
n=tongji(); //调用统计函数
printf("一共有%d个学生,分数从高到低排列如下:\n",n);
paixu1(); //调用成绩排名函数
print3(); //调用打印学生成绩函数
menu=0; //控制跳出后不必再显示主菜单
break;
case 4: //进入查询学生信息功能模块
system("cls"); ////自动清屏函数(系统提供)
do // 控制循环查询信息
{
caidan1(); //调用查询功能子菜单
printf("\n请选择>>");
scanf("%d",&choose1);
switch(choose1)
{
case 1: //按学号查询信息
do //控制循环查询
{
printf("请输入你要查找的学号:");
scanf("%ld",&m);
find(m); //调用按学号查询信息函数
printf("\n继续查找请输入1:\n返回上级菜单输入0:\n");
scanf("%d",&m);
}while(m==1);
system("cls"); ////自动清屏函数(系统提供)
break;
case 2: //按姓名查询信息
do //控制循环查询
{
printf("请输入你要查找的姓名:");
scanf("%s",name);
find1(name); //调用按姓名查询学生信息函数
printf("\n继续查找请输入1\n返回上级菜单输入0:\n");
scanf("%d",&m);
}while(m==1);
system("cls"); ////自动清屏函数(系统提供)
break;
default:
printf("\n选择错误,请重新选择!\n");
break;
}
}while(choose1!=0);
system("cls"); ////自动清屏函数(系统提供)
break;
case 5: //进入统计学生信息个数功能模块
n=tongji(); //调用统计个数函数
printf("数据库中一共有%d个学生信息.\n",n);
printf("\n");
menu=0; //控制跳出后不必再显示主菜单
break;
case 6: //进入更新信息功能模块
system("cls"); ////自动清屏函数(系统提供)
caidan6(); //调用更新功能子菜单函数
do // 控制循环更新修改学生信息
{
printf("\n\n请输入要更新修改信息的学生学号:");
scanf("%ld",&m);
gengxin(m); //调用更新信息函数
printf("\n继续更新请输入1返回总菜单输入0:");
scanf("%d",&m);
menu=1; //控制跳出后重新显示主菜单
}while(m==1);
system("cls"); ////自动清屏函数(系统提供)
break;
case 7: //进入删除学生信息功能模块
system("cls"); ////自动清屏函数(系统提供)
caidan2(); //调用删除信息子菜单
do //控制循环删除信息
{
printf("\n请选择>>");
scanf("%d",&choose1);
switch(choose1)
{
case 1: //按学号删除信息
do //控制循环按学号删除信息
{
printf("请输入要删除的学生学号:");
scanf("%ld",&m);
xuehaoDel(m); //调用按学号删除信息函数
printf("\n继续删除请输入1\n返回总菜单输入0:");
scanf("%d",&m);
}while(m==1);
system("cls"); ////自动清屏函数(系统提供)
break;
case 2: //按姓名删除信息
do //控制循环按姓名删除
{
printf("请输入要删除的学生姓名:");
scanf("%s",name);
nameDel(name); //调用按姓名删除信息函数
printf("\n继续删除请输入1\n返回总菜单输入0:");
scanf("%d",&m);
}while(m==1);
system("cls"); ////自动清屏函数(系统提供)
break;
case 3: //全部删除信息
printf("确定全部删除请输入:1 (删除后再保存将不能恢复!)\n放弃删除请输入:0\n");
scanf("%d",&choose1);
if(choose1==1)
{
head->next=NULL;
printf("\n全部删除成功!");
}
break;
default:
printf("\n选择错误,请重新选择!\n");
break;
}
}while(choose1!=0);
system("cls"); ////自动清屏函数(系统提供)
break;
default:
printf("\n选择错误,请重新选择!\n");
break;
}
}while(choose!=0);
close(); //调用保存信息进库文件函数
printf("\n *** !数据保存成功! ***\n");
printf("感谢使用!请按任意键退出!\n"); //**********************结束程序运行!
}
//******************************插入函数************************************
void inser(long b)
{
Stud *q;
q=head->next;
while(q!=NULL&&b!=q->xuehao) //检查是否存已在该同学
q=q->next;
r=q;
if(!q) //如果还没存在该同学就添加进信息库
{
r=head;
while(r->next!=NULL) //找到链表的尾结点
r=r->next;
while(b>0)
{
R=(Stud *)malloc(sizeof(Stud)); //申请一个新结点
R->xuehao=b;
shuru(); //调用输入信息函数
R->next=NULL;
r->next=R;
r=r->next;
b=-1; //控制循环
printf("!插入成功!具体信息如下:\n");
}
}
else
printf("信息库中已存在该同学!\n");
}
//***************************输出单条信息*******************************************
void print()
{
w=r;
if(w!=NULL)
{
printf("\n学号 姓名 性别 系别 班级 宿舍 电话 家庭地址 \n");
output(); //调用输出学籍基本信息函数
printf("\n考试成绩: 高数 英语 算法 汇编 电路 体育 总分 平均分 \n");
printf(" ");
output1(); //调用输出成绩信息函数
printf("\n\n课表信息: 星期一 星期二 星期三 星期四 星期五\n");
output2(); //调用输出课表信息函数
}
printf("\n");
}
//****************************输出全部信息**********************************
void print2()
{
Stud *q=head;
printf("\n学号 姓名 性别 系别 班级 宿舍 电话 家庭地址 \n");
w=head->next;
while (w!=NULL)
{
output(); //调用输出学籍基本信息函数
w=w->next; //指向下一个结点准备输出下一个同学的信息
}
printf("\n");
}
//****************************输出成绩信息*************************************
void print3()
{
printf("\n学号 姓名 班级 高数 英语 算法 汇编 电路 体育 总分 平均分 \n");
w=head->next;
while (w!=NULL)
{
printf("%-6ld%-6s %-4s ",w->xuehao,w->name,w->banji);
output1();//调用输出成绩信息函数
printf("\n");
w=w->next; //指向下一个结点准备输出下一个同学的信息
}
printf("\n");
}
//*****************************输出课表信息****************************************
void print4()
{
w=head->next;
while (w!=NULL)
{ printf("\n学号: %ld 姓名: %s 班级:%s\n",w->xuehao,w->name,w->banji);
printf("\n课表信息: 星期一 星期二 星期三 星期四 星期五\n");
output2(); //调用输出课表信息函数
printf("\n");
w=w->next; //指向下一个结点准备输出下一个同学的信息
}
printf("\n");
}
//****************************按学号升序排序****************************************
void paixu() //按学号排序
{
Stud *H,*L,*P;
int i,j,flag,n;
n=tongji(); //调用统计个数函数
for(i=0;i<n-1;i++)
{
flag=0; //退出控制符
H=head;
L=H->next;
P=L->next;
for(j=1;j<n-i;j++)
{
if(L->xuehao>P->xuehao) //如果当前结点同学学号大于下个结点学号则通过指针调换前后顺序
{
H->next=P;
L->next=P->next;
P->next=L;
flag=flag+1;
}
H=H->next;
L=H->next;
P=L->next;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -