资源描述
题目名称: 学生信息管理系统
算法分析:
1用结构体标出信息系统的成员:学生学号,学生姓名,班级,成绩,排名
2 运用c语言的文献知识将系统的信息存放在c盘下的“zuoye.txt”的文献夹下
3 定义各个子函数(1)定义输入信息函数,将学生信息按一定格式用scanf函数输入(记录M个学生的信息);
(2)定义输出函数,每两个表一页直到最后一个;
(3)定义信息查询函数。a,定义按学号查询函数,假如输入的学号等于学生学号则输出要查询的信息;b,定义按姓名查询函数,假如输入的姓名字符串等于其中一个学生的姓名字符串则输出信息;c,定义按班级查找函数,假如输入的数字等于其中学生的班级数,则输出该信息;d,定义按成绩查找函数,假如输入的数字等于其中学生的成绩数,则输出该信息;e,定义查找总函数,输入一个数选择查找方式,1-4分别相应调用abcd四个函数。
(4)定义删除信息函数。输入的数字作为要删除的学生学号,输出要删除的学生信息后选择是否删除,删除后将第g+1个的信息赋给第g个,输出删除后的信息表。
(5)定义信息修改函数。输入的数字等于要修改的学生学号,输出要修改的学生信息后选择是否修改,用switch,case语句选择要修改的项目,输入n,y决定是否继续直到不继续修改,输出学生信息。
(6)定义信息记录函数。输入一个数字作为成绩,比较M个学生成绩是否等于输入的数字,记录相等的个数n输出。
(7)定义成绩排序函数。用冒泡排序法将M个学生的成绩按从大到小的顺序排列后输出。
4 定义主函数。调用读取文献函数,输入数字1-5分别相应调用修改学生信息函数,删除学生信息函数,查找学生信息函数,记录学生信息函数,学生成绩排行信息函数,0表达退出系统。最后调用保存文献函数。结束程序。
流程设计:
学生信息管理系统程序
用结构体说明各个成员
定义各个子函数
定义成绩排序函数
定义记录函数
定义删除信息函数
定义修改信息函数
定义输入输出函数
定义信息查询函数
用冒泡排序法将M个学生的成绩按从大到小排列
比较成绩数是否等于输入数
选择要删除的学号,判断是否删除
switch,case语句选择查询方式
选择要修改的信息1-4
定义按学号,姓名,班级,成绩的函数
计数,输出n
将第g+1个信息赋给第g个
判断是否继续修改直到不继续,结束
定义主函数,用switch case选择要调用的子函数
保存文献退出系统结束程序
代码设计:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 2
#define PAGE 2
/*学生信息结构体类型*/
typedef struct
{int num; /*学号*/
char name[20]; /*姓名*/
int banji; /*班级*/
int chengji; /*成绩*/
int paiming; /*排名*/
}STUDENTS;
int read_file(STUDENTS students[])/*文献的读取*/
{ FILE *fp;/*定义一个文献指针变量*/
int i=0;
if((fp=fopen("zuoye.txt","r"))==NULL)/*文献空判断,fopen打开一个文献*/
{ printf("\n\n*****库存文献不存在!请创建");
return 0;
}
while(feof(fp)!=1)/*文献是否结束*/
{ fread(&students[i],sizeof(STUDENTS),1,fp);/*读取文献*/
if(students[i].num==0)/*学号是否为零*/
break;
else
i++;
}
fclose(fp);/*关闭文献*/
return i;
}
void save_file(STUDENTS students[],int sum)/*保存文献*/
{ FILE *fp;
int i;
if((fp=fopen("zuoye.txt","wb"))==NULL)/*判断文献是否为空*/
{ printf("读文献错误!\n");
return;
}
for(i=0;i<sum;i++)
if(fwrite(&students[i],sizeof(STUDENTS),1,fp)!=1)/*向文献写入的数据块不等于1*/
printf("写文献错误!\n");
fclose(fp);
}
/*输入模块*/
int input(STUDENTS students[])
{ int i=0;
printf("\n\n 录入学生信息 (最多%d人)\n",M);
printf("----------------------------------------------------\n");
do
{ printf("\n 第%d人",i+1);
printf("\n 学生学号:");
scanf("%d",&students[i].num); if(students[i].num==0) break;
printf("\n 学生姓名:");
scanf("%s",students[i].name);
printf("\n 班级:");
scanf("%d",&students[i].banji);
printf("\n 成绩:");
scanf("%d",&students[i].chengji);
printf("\n 排名:");
scanf("%d",&students[i].paiming);
i++;
}while(i<M);
printf("\n --%d个学生信息输入完毕!--\n",i);
printf("\n 按任意键返回主菜单!");
getchar();
return i;
}
/*输出模块*/
void output(STUDENTS students[])
{int i=0,j=0,page=1;
printf("\n\n --学生信息表-- 第%d页\n\n",page);/*每两个一页*/
printf("学生学号----姓名-----班级----- 成绩-----排名\n");
printf("-------------------------------------------------------\n");
do
{ if(students[i].num!=0)
{ j++;
if(j%PAGE!=0)
{ printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,
students[i].banji, students[i].chengji,students[i].paiming);
printf("------------------------------------------------------\n");
}
}
else
{ printf("按任意键继续!");
getchar();
printf("\n\n --学生信息表-- 第%d页\n\n",++page);
printf("学生学号----姓名-----班级----- 成绩-----排名\n");
printf("------------------------------------------\n");
{ printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,
students[i].banji, students[i].chengji,students[i].paiming);
printf("---------------------------------------------\n");
}
}
i++;
}while(students[i].num<M);
printf("按任意键返回主菜单!");
getchar( );
}
/*学生信息查询*/
void find_by_num(STUDENTS students[],int sum) /*按学号查找*/
{ int i,find_num;
printf("\n 请输入要查找的学生学号:");
scanf("%d",&find_num);
for(i=0;i<sum;i++)
if(students[i].num==find_num)
{
printf("这是您所查找到的学生信息:\n");
printf("学生学号----姓名-----班级----- 成绩-----排名\n");
printf("------------------------------------------\n");
printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,
students[i].banji, students[i].chengji,students[i].paiming);
printf("---------------------------------------------\n");
break;
}
else
{
printf("\n 未找到要查找的学生信息,按任意键返回!");
getchar();
}
}
void find_by_name(STUDENTS students[],int sum)/*按姓名查找*/
{
int i;
char find_name[20];
printf("\n 请输入要查找的学生姓名:");
scanf("%s",find_name);
for(i=0;i<sum;i++);
if(strcmp(students[i].name,find_name)==0) /*字符串比较相等返回0*/
{printf("这是您所查找到属于该学生的信息:");
printf("学生学号----姓名-----班级----- 成绩-----排名\n");
printf("------------------------------------------\n");
printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,
students[i].banji, students[i].chengji,students[i].paiming);
printf("---------------------------------------------\n");
}
else
{printf("\n 未找到要查找的学生信息,按任意键返回!");
getchar();
}
}
void find_by_banji(STUDENTS students[],int sum)/*按班级查找*/
{
int i;
int find_banji;
printf("\n 请输入要查找的学生班级:");
scanf("%d",&find_banji);
for(i=0;i<sum;i++)
if(students[i].banji==find_banji)
{printf("这是您所查找到属于该班级的学生:");
printf("学生学号----姓名-----班级----- 成绩-----排名\n");
printf("------------------------------------------\n");
printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,
students[i].banji, students[i].chengji,students[i].paiming);
printf("---------------------------------------------\n");
}
else
{printf("\n 未找到要查找的班级信息,按任意键返回!");
getchar();
}
}
void find_by_chengji(STUDENTS students[],int sum)/*按成级查找*/
{
int i;
int find_chengji;
printf("\n 请输入要查找的学生成绩:");
scanf("%d",&find_chengji);
for(i=0;i<sum;i++)
{
if(students[i].chengji==find_chengji)
{
printf("这是您所查找到有该成绩的学生:");
printf("学生学号----姓名-----班级----- 成绩-----排名\n");
printf("------------------------------------------\n");
printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,
students[i].banji, students[i].chengji,students[i].paiming);
printf("---------------------------------------------\n");
}
else
{printf("\n 未找到要查找的学生信息,按任意键返回!");
getchar();
}
}
}
void find(STUDENTS students[],int sum)/*定义查找总函数*/
{ int choice;
printf("\n 您要按照哪种方式查找? \n");/*用switch语句*/
printf("\n 1.按学生学号查找 \n");
printf("\n 2.按学生姓名查找 \n");
printf("\n 3.按学生班级查找 \n");
printf("\n 4.按学生成绩查找 \n");
printf("\n 0. 退出\n");
printf("\n 请选择(0-4): \n");
scanf("%d",&choice);
switch(choice)
{ case 1: find_by_num(students,sum); break;
case 2: find_by_name(students,sum); break;
case 3: find_by_banji(students,sum); break;
case 4: find_by_chengji(students,sum); break;
case 0: break;
}
}
/*删除信息模块*/
void del(STUDENTS students[])
{ int i,g,sum;
int del_num;
printf("\n 请输入要删除的学生学号:");
scanf("%d",&del_num);
for(i=0;i<sum;i++)
if(students[i].num==del_num)/*通过学号判断*/
{
printf("这是您所要删除学生信息:\n");
printf("学生学号----姓名-----班级----- 成绩-----排名\n");
printf("------------------------------------------\n");
printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,
students[i].banji, students[i].chengji,students[i].paiming);
printf("---------------------------------------------\n");
printf("您确认要删除吗?");
printf("按任意键继续!");
getchar();
printf("已成功删除学生信息!");
}
for(g=i;g<sum;g++)
{ students[g]=students[g+1];
printf("删除后的信息表:\n");
printf("学生学号----姓名-----班级----- 成绩-----排名\n");
printf("------------------------------------------\n");
printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,
students[i].banji, students[i].chengji,students[i].paiming);
printf("---------------------------------------------\n");
}
}
/*信息修改模块*/
void modify(STUDENTS students[],int sum)
{int i=0,choice,modify_num,flag;
do
{
printf("请输入要修改的学生学号:");
scanf("%d",&modify_num);
for(i=0;i<sum;i++)
if(students[i].num==modify_num)
{ printf("\n\n --学生信息-- \n\n");
printf("学生学号----姓名-----班级----- 成绩-----排名\n");
printf("------------------------------------------\n");
printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,
students[i].banji, students[i].chengji,students[i].paiming);
printf("---------------------------------------------\n");
printf("\n 您要修改哪一项?\n");
printf("\n 1.学生姓名\n");
printf("\n 2.学生班级\n");
printf("\n 3.成绩\n");
printf("\n 4.排名\n");
printf("\n 请选择(1-4):\n");
scanf("%d",&choice);
switch(choice)
{ case 1: printf("\n 请输入修改后的学生姓名:");
scanf("%s",students[i].name); break;
case 2: printf("\n 请输入修改后的学生班级:");
scanf("%s",students[i].banji); break;
case 3: printf("\n 请输入修改后的成绩:");
scanf("%s",students[i].chengji); break;
case 4: printf("\n 请输入修改后的排名:");
scanf("%d",&students[i].paiming); break;
}
printf("\n\n --学生信息-- \n\n");
printf("学生学号----姓名-----班级----- 成绩-----排名\n");
printf("------------------------------------------\n");
printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,
students[i].banji, students[i].chengji,students[i].paiming);
printf("---------------------------------------------\n");
break;
}
else
{
printf("\n 该学生不存在!");
}
printf("\n 修改成功!\n");
printf("您要继续修改吗?(Y/N)");
if (choice=='Y'||choice=='y')
{ flag=1;
printf("\n 继续!\n");
}
else flag=0;
}while( flag==1); /*直到不修改结束循环*/
printf("\n 按任意键返回主菜单!");
getchar();
}
/*学生信息记录模块*/
void count(STUDENTS students[],int sum) /*记录某个成绩的学生个数*/
{
int i;
int count_chengji;
int n=0;
printf("请输入一个成绩:\n");
scanf("%d",&count_chengji);
for(i=0;i<sum;i++)
{
if(students[i].chengji==count_chengji)/*计数*/
n++;
break;
}
printf("记录出属于该成绩的一共有%d个人\n",n);
}
/*成绩排序模块*/
void sort(STUDENTS students[],int sum)
{
STUDENTS t;
int i,j;
printf("\n\n --学生信息-- \n\n");
printf("学生学号----姓名-----班级----- 成绩-----排名\n");
printf("------------------------------------------\n");
for(i=1;i<sum;i++)
{ for(j=i+1;j<sum;j++)
if(students[j].chengji>students[i].chengji)/*冒泡排序法*/
{t=students[j];
students[j]=students[i];
students[i]=t;
}
}
for(i=0;i<sum;i++)
{ printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,
students[i].banji, students[i].chengji,students[i].paiming);
printf("---------------------------------------------\n");
}
}
void main()
{
STUDENTS students[M];
int choice,sum;
sum=read_file(students);/*文献读取*/
if (sum==0)
{printf("请录入学生信息!*******\n");
sum=input(students);/*输入信息*/
}
do
{
printf("\n\n\n *******学生信息管理系统******* \n\n");
printf(" 1.修改学生信息 \n\n");
printf(" 2.删除学生信息\n\n");
printf(" 3.查找学生信息\n\n");
printf(" 4.记录学生信息\n\n");
printf(" 5.学生成绩排行信息\n\n");
printf(" 0.退出系统\n\n");
printf(" 请选择\n\n");
scanf("%d",&choice);
switch(choice)
{ case 1 : modify(students,sum); break;
case 2 : del(students); break;
case 3 : find(students,sum); break;
case 4 : count(students,sum); break;
case 5 : sort(students,sum); break;
case 0 : break;
}
}while(choice!=0); /*直到选择退出系统*/
save_file(students,sum);
}
运营结果:
展开阅读全文