资源描述
一、设计思想
一方面建立主函数实现功能选取,然后通过调用函数来分别实现;1.学生信息录入功能(以文献方式保存);2.学生信息浏览功能;3.学生信息查询功能(可以按学号,班级,性别分别进行查询,用子菜单,可显示多条记录);4.学生信息删除功能(按学号进行删除);5.学生信息修改功能(按学号修改);6.不及格学生成绩汇总功能。
二. 概要设计
1. 模块简介
程序由十一种模块构成,分别是:主菜单模块、录入信息模块、保存信息模块、浏览信息模块、查询菜单模块、按学号查询模块、按姓名查询模块、按性别查询模块、修改信息模块、删除信息模块、不及格学生信息汇总模块。
2.函数功能
lr()函数是实现信息录入功能函数;
bc()函数是将录入信息保存到文献中额函数;
ll()是实现浏览功能函数;
cx()是实现信息查询功能函数,
在cx()函数调用了xuehao();xingming();xingbie()这三个函数,这三个函数分别实现按学号查找、按姓名查找、按性别查找学生信息 功能;
sc()函数是实现删除学生信息功能;
xg()实现信息修改功能;
hz()实现不及格学生汇总功能
3、系统流程开始
输入0-6选取功能
输入5
输入4
输入3
输入2
退出程序
输入0
输入6
输入学生信息
将学生信息保存到文献
浏览学生信息
查询学生信息,输入1-3选取查询方式
输入1,按学号查询
输入2,按姓名查询
输入3,按性别查询
修改学生信息
输入1
输入0取消查询
输入所需修改学生学号
输入0-9选取所需修改内容
输入新信息
修改完毕
删除信息
输入学生学号
删除完毕
不及格学生信息汇总
三. 详细设计
1、代码
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
struct student
{
char num[13];
char name[15];
char cla[10];
int age;
char sex[4];
char bir[8];
char addr[15];
char tele[15];
char course[10];
int score;
};int n=0;
struct student stu[100]; //定义变量
struct student *p;
FILE *fp;
void lr();
void ll();
void cx();
void sc();
void xg();
void hz();
void bc();
void xuehao();
void xingming();
void xingbie(); //定义函数
void main() //主函数
{
int z;
printf("+---------------------------+\n");
printf("| 欢迎使用学生信息管理系统 |\n");
printf("+---------------------------+\n");
printf("提示:为保证您操作得到保存,请按正常顺序退出系统^_^\n");
do
{
printf("\n\t\t\t--------------------------------\n");
printf("\t\t\t+ 主菜单 |\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t+ [1]----录入学生信息 |\n");
printf("\t\t\t+ [2]----浏览学生信息 |\n");
printf("\t\t\t+ [3]----查询学生信息 |\n");
printf("\t\t\t+ [4]----删除学生信息 |\n");
printf("\t\t\t+ [5]----修改学生信息 |\n");
printf("\t\t\t+ [6]----不及格学生成绩汇总 |\n");
printf("\t\t\t+ [0]----退出系统 |\n");
printf("\t\t\t--------------------------------\n");
printf("请输入您选取:");
scanf("%d",&z);
switch(z)
{
case 0 : break;
case 1 :lr();break;
case 2 :ll();break;
case 3 :cx();break;
case 4 :sc();break;
case 5 :xg();break;
case 6 :hz();break; //函数调用
default:printf("\n无效选项!");
}
}
while(z!= 0);
}
void lr() //录入函数
{ int y;
if(n==0)
p=stu;
printf("--------------------\n");
printf("\n\t\t请输入学生学号:");
scanf("%s",&stu[n].num);
printf("\n\t\t请输入学生姓名:");
scanf("%s",&stu[n].name);
printf("\n\t\t请输入学生班级:");
scanf("%s",&stu[n].cla);
printf("\n\t\t请输入学生年龄:");
scanf("%d",&stu[n].age);
printf("\n\t\t请输入学生性别:");
scanf("%s",&stu[n].sex);
printf("\n\t\t请输入学生出生年月:");
scanf("%s",&stu[n].bir);
printf("\n\t\t请输入学生地址:");
scanf("%s",&stu[n].addr);
printf("\n\t\t请输入学生电话:");
scanf("%s",&stu[n].tele);
printf("\n\t\t请输入学生课程:");
scanf("%s",&stu[n].course);
printf("\n\t\t请输入学生成绩:");
scanf("%d",&stu[n].score); //输入学生信息
n++;
p++;
printf("请输入 0以保存信息:");
scanf("%d",&y);
if(y==0)
bc(); //调用函数
else
printf("无效选项");
return;
}
void bc()/*保存函数*/
{
int i;
if ((fp=fopen("fstudent.txt","wb"))==NULL) //打开一种只写文献,将要打开文献指针赋给fp,使fp与文献相联系
{
printf("\n\t\t文献打开失败");
exit(0);
}
for (i=0;i<100;i++)
{ fwrite(&stu[i],sizeof(struct student),1,fp);//把信息输出大奥fp所指向文献中,返回值为写到 fp文献中数据项个数
}
fclose(fp); //关闭fp所指文献,有错返回非0,否则返回0
printf("\n\t\t通讯录文献已保存");
printf("\n\t\t按回车键退出程序\n\t\t");
}
void ll()/*浏览函数*/
{
int i;
if(n!=0)
{
printf("\n\t\t*************** 如下为学生管理系统所有信息************");
for (i=0;i<n;i++)
{
printf("\n\t\t学号: %s",stu[i].num);
printf("\n\t\t姓名: %s",stu[i].name);
printf("\n\t\t班级: %s",stu[i].cla);
printf("\n\t\t年龄: %d",stu[i].age);
printf("\n\t\t性别: %s",stu[i].sex);
printf("\n\t\t出生年月: %s",stu[i].bir);
printf("\n\t\t地址: %s",stu[i].addr);
printf("\n\t\t电话: %s",stu[i].tele);
printf("\n\t\t课程: %s",stu[i].course);
printf("\n\t\t成绩: %d",stu[i].score);
printf("\t\t\n");
}
printf("\n\t\t************************************************");
}
}
void cx()/*查询函数*/
{int c;
do{ printf("\n");
printf("+--------------------+\n");
printf("| 按学号查询 请按 1 |\n");
printf("| 按姓名查询 请按 2 |\n");
printf("| 按性别查询 请按 3 |\n");
printf("| 取消 请按 0 |\n");
printf("+--------------------+\n");
printf("请输入您选取:");
scanf("%d",&c);
switch(c)
{
case 0:break;
case 1:xuehao();break;
case 2:xingming();break;
case 3:xingbie();break; //调用函数
default:
printf("\n提示:无效选项!");
break;
}
}while(c!= 0);
}
void xingming()//按姓名查询
{
int i;
int j=0;
char name[15];
printf("\n\t\t****************** 按姓名查找 ******************");
printf("\n\t\t请输入要查学生姓名:");
scanf("%s",name);
for(i=0;i<n;i++)
if(strcmp(name,stu[i].name)==0) //比较两个字符串,若相等,返回0
{
j++;
printf("\n\t\t************** 如下是您查找学生信息 **********");
printf("\n\t\t学号: %s",stu[i].num);
printf("\n\t\t姓名: %s",stu[i].name);
printf("\n\t\t班级: %s",stu[i].cla);
printf("\n\t\t年龄: %d",stu[i].age);
printf("\n\t\t性别: %s",stu[i].sex);
printf("\n\t\t出生年月: %s",stu[i].bir);
printf("\n\t\t地址: %s",stu[i].addr);
printf("\n\t\t电话: %s",stu[i].tele);
printf("\n\t\t课程: %s",stu[i].course);
printf("\n\t\t成绩: %d",stu[i].score);
printf("\n\t\t************************************************");
printf("\n\t\t与否继续查询?(y/n)");
getchar(); //输入选取
if (getchar()=='y')
xingming(); //函数递归调用
return ;
}
if(j==0)
{
printf("\n\t\t未查找该学生信息:");
printf("\n\t\t按回车键返回菜单:");
getchar();
getchar();
return;
}
printf("\n\t\t按回车键返回主菜单:");
getchar();
getchar();
}
void xuehao()//*按学号查询
{
int i;
int j=0;
char num[13];
printf("\n\t\t****************** 按学号查找 ******************");
printf("\n\t\t请输入要查学生学号:");
scanf("%s",&num);
for(i=0;i<n;i++)
if(strcmp(num,stu[i].num)==0)
{
j++;
printf("\n\t\t************** 如下是您查找学生信息 **********");
printf("\n\t\t学号: %s",stu[i].num);
printf("\n\t\t姓名: %s",stu[i].name);
printf("\n\t\t班级: %s",stu[i].cla);
printf("\n\t\t年龄: %d",stu[i].age);
printf("\n\t\t性别: %s",stu[i].sex);
printf("\n\t\t出生年月: %s",stu[i].bir);
printf("\n\t\t地址: %s",stu[i].addr);
printf("\n\t\t电话: %s",stu[i].tele);
printf("\n\t\t课程: %s",stu[i].course);
printf("\n\t\t成绩: %d",stu[i].score);
printf("\n\t\t************************************************");
printf("\n\t\t与否继续查询?(y/n)");
getchar();
if (getchar()=='y')
xuehao(); //函数递归调用
return ;
}
if(j==0)
{
printf("\n\t\t未查找该学生信息:");
printf("\n\t\t按回车键返回菜单:");
getchar();
getchar();
return;
}
printf("\n\t\t按回车键返回主菜单:");
getchar();
getchar();
}
void xingbie()//按性别查询
{
int i;
int j=0;
char sex[4];
printf("\n\t\t****************** 按性别查找 ******************");
printf("\n\t\t请输入要查学生性别:");
scanf("%s",&sex);
for(i=0;i<n;i++)
{for(i=0;i<n;i++)
if(strcmp(sex,stu[i].sex)==0)
{
j++;
printf("\n\t\t************** 如下是您查找学生信息 **********");
printf("\n\t\t学号: %s",stu[i].num);
printf("\n\t\t姓名: %s",stu[i].name);
printf("\n\t\t班级: %s",stu[i].cla);
printf("\n\t\t年龄: %d",stu[i].age);
printf("\n\t\t性别: %s",stu[i].sex);
printf("\n\t\t出生年月: %s",stu[i].bir);
printf("\n\t\t地址: %s",stu[i].addr);
printf("\n\t\t电话: %s",stu[i].tele);
printf("\n\t\t课程: %s",stu[i].course);
printf("\n\t\t成绩: %d",stu[i].score);
printf("\n\t\t************************************************");
}
printf("\n\t\t与否继续查询?(y/n)");
getchar();
if (getchar()=='y')
xingbie(); //函数递归调用
return;
}
if(j==0)
{
printf("\n\t\t未查找该学生信息:");
printf("\n\t\t按回车键返回菜单:");
getchar();
getchar();
return;
}
printf("\n\t\t按回车键返回主菜单:");
getchar();
getchar();
}
void xg()/*修改函数*/
{
char num[13];
char name[15];
char cla[10];
int age;
char sex[4];
char bir[8];
char addr[15];
char tele[15];
char course[10];
char score;
int i,j,c;
if(n!=0)
{
printf("请输入您要修改学生学号:");
scanf("%s",&num);
printf("\n");
for(i=0;i<n;i++)
if(strcmp(num,stu[i].num)==0)
{j=i;
printf("请选取您要修改学生信息内容:\n");
printf("+--------------------------+\n");
printf("| 姓名 请按 1 |\n");
printf("| 班级 请按 2 |\n");
printf("| 年龄 请按 3 |\n");
printf("| 性别 请按 4 |\n");
printf("| 出生年月 请按 5 |\n");
printf("| 地址 请按 6 |\n");
printf("| 电话 请按 7 |\n");
printf("| 课程 请按 8 |\n");
printf("| 成绩 请按 9 |\n");
printf("| 取消 请按 0 |\n");
printf("+--------------------------+\n");
printf("请输入您选取:");
scanf("%d",&c);
printf("\n");
switch(c)
{
case 0:break;
case 1:printf("请输入新姓名:");
scanf("%s",stu[j].name);
strcpy(name,stu[j].name); //复制字符串,返回name
break;
case 2:printf("请输入新班级:");
scanf("%s",stu[j].cla);
strcpy(cla,stu[j].cla);
break;
case 3:printf("请输入新年龄:");
scanf("%d",&stu[j].age);
strcpy(age,stu[j].age);break;
case 4:printf("请输入新性别:");
scanf("%s",stu[j].sex);
strcpy(sex,stu[j].sex);break;
case 5:printf("请输入新出生年月:");
scanf("%s",stu[j].bir);
strcpy(bir,stu[j].bir);break;
case 6:printf("请输入新地址:");
scanf("%s",stu[j].addr);
strcpy(addr,stu[j].addr);break;
case 7:printf("请输入新电话:");
scanf("%s",stu[j].tele);
strcpy(tele,stu[j].tele);break;
case 8:printf("请输入新课程:");
scanf("%s",stu[j].course);
strcpy(course,stu[j].course);break;
case 9:printf("请输入新成绩:");
scanf("%d",stu[j].score);
strcpy(score,stu[j].score);break;
default:
printf("\n无效选项!");
break;
}
}
printf("\n\t\t按回车键返回主菜单:");
getchar();
getchar(); //输入回车键
return;
}else
printf("提示:无学生数据,请输入数据!");
}
void sc()/*删除函数*/
{
int e=0;
char name[15];
int j;
int i;
char id[20];
printf("\n\t\t请输入要删除联系人姓名:");
scanf("%s",name);
getchar();
for (i=0;i<n;i++)
{
if (strcmp(stu[i].name,name)==0)
{
printf("\n\t\t如下是您要删除学生纪录:");
e++;
printf("\n\t\t****************************");
printf("\n\t\t学号: %s",stu[i].num);
printf("\n\t\t姓名: %s",stu[i].name);
printf("\n\t\t班级: %s",stu[i].cla);
printf("\n\t\t年龄: %d",stu[i].age);
printf("\n\t\t性别: %s",stu[i].sex);
printf("\n\t\t出生年月: %s",stu[i].bir);
printf("\n\t\t地址: %s",stu[i].addr);
printf("\n\t\t电话: %s",stu[i].tele);
printf("\n\t\t课程: %s",stu[i].course);
printf("\n\t\t成绩: %d",stu[i].score);
printf("\n\t\t****************************");
printf("\n\t\t与否删除?(y/n)");
if (getchar()=='y')
{
for (j=i;j<n;j++)
stu[j]=stu[j+1];
n--;
printf("\n\t\t删除成功");
printf("\n\t\t与否继续删除?(y/n)");
getchar();
if (getchar()=='y')
sc();
}
}
}
if (e==0)
{
printf("\n\t\t没有该学生纪录");
printf("\n\t\t与否继续删除?(y/n)");
if (getchar()=='y')
sc(); //函数递归调用
}
}
void hz()/*汇总函数*/
{int score;
int i;
int *p;
for(i=0;i<n;i++)
{for(p=&stu[i].score;p<(stu[i].score+n);p++) //用指针变量指向数组元素
printf("%d",*p); //*p即为学生成绩
if(*p<60)
{printf("\n\t\t************** 如下是不及格学生信息 **********");
printf("\n\t\t学号: %s",stu[i].num);
printf("\n\t\t姓名: %s",stu[i].name);
printf("\n\t\t班级: %s",stu[i].cla);
printf("\n\t\t年龄: %d",stu[i].age);
printf("\n\t\t性别: %s",stu[i].sex);
printf("\n\t\t出生年月: %s",stu[i].bir);
printf("\n\t\t地址: %s",stu[i].addr);
printf("\n\t\t电话: %s",stu[i].tele);
printf("\n\t\t课程: %s",stu[i].course);
printf("\n\t\t成绩: %d",stu[i].score);
printf("\n\t\t************************************************");
}
}
}
四、 总结
在这为期一周课程设计中,我发现了诸多问题,也正是由于发现了问题,我也学到了诸多东西。在写程序过程中总是会发现许多错误,并且发现自己诸多知识都没掌握好,因此在开始设计之前我把课本后几章又看了一遍。在写时候,我也是把书放在旁边,随时翻阅。这不但让我巩固了已学到知识,也让我弄懂了诸多问题。在这一周里,诸多时候程序没有错误却无法运营,本来束手无策我也学会通过调试程序来发现问题所在,然后解决问题。通过这一周实践操作,我学到了诸多有用东西,这无论是对后来学习还是生活均有无比重要价值。
展开阅读全文