1、一、设计思想 一方面建立主函数实现功能选取,然后通过调用函数来分别实现;1.学生信息录入功能(以文献方式保存);2.学生信息浏览功能;3.学生信息查询功能(可以按学号,班级,性别分别进行查询,用子菜单,可显示多条记录);4.学生信息删除功能(按学号进行删除);5.学生信息修改功能(按学号修改);6.不及格学生成绩汇总功能。 二. 概要设计 1. 模块简介 程序由十一种模块构成,分别是:主菜单模块、录入信息模块、保存信息模块、浏览信息模块、查询菜单模块、按学号查询模块、按姓名查询模块、按性别查询模块、修改信息模块、删除信息模块、不及格学生信息汇总模块。 2.函数功能 lr()函数是实
2、现信息录入功能函数; bc()函数是将录入信息保存到文献中额函数; ll()是实现浏览功能函数; cx()是实现信息查询功能函数, 在cx()函数调用了xuehao();xingming();xingbie()这三个函数,这三个函数分别实现按学号查找、按姓名查找、按性别查找学生信息 功能; sc()函数是实现删除学生信息功能; xg()实现信息修改功能; hz()实现不及格学生汇总功能 3、系统流程开始 输入0-6选取功能 输入5 输入4 输入3 输入2 退出程序 输入0 输入6 输入学生信息 将学生信
3、息保存到文献
浏览学生信息
查询学生信息,输入1-3选取查询方式
输入1,按学号查询
输入2,按姓名查询
输入3,按性别查询
修改学生信息
输入1
输入0取消查询
输入所需修改学生学号
输入0-9选取所需修改内容
输入新信息
修改完毕
删除信息
输入学生学号
删除完毕
不及格学生信息汇总
三. 详细设计
1、代码
#include
4、r 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(); v
5、oid xuehao(); void xingming(); void xingbie(); //定义函数 void main() //主函数 { int z; printf("+---------------------------+\n"); printf("| 欢迎使用学生信息管理系统 |\n"); printf("+---------------------------+\n"); printf("提示:为保证您操作得到保存,请按正常顺序退出系统^_^\n"); do {
6、 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"); pri
7、ntf("\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---------------------
8、\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();bre
9、ak; //函数调用 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",&s
10、tu[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
11、[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();
12、 //调用函数 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 stud
13、ent),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=
14、0;i 15、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("| 16、按学号查询 请按 1 |\n");
printf("| 按姓名查询 请按 2 |\n");
printf("| 按性别查询 请按 3 |\n");
printf("| 取消 请按 0 |\n");
printf("+--------------------+\n");
printf("请输入您选取:");
scanf("%d",&c);
switch(c)
{
case 0:break;
17、 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;
cha 18、r name[15];
printf("\n\t\t****************** 按姓名查找 ******************");
printf("\n\t\t请输入要查学生姓名:");
scanf("%s",name);
for(i=0;i 19、f("\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(" 20、\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();
ge 21、tchar();
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 22、
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地址: 23、 %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(); //函数递归调用
ret 24、urn ;
}
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 25、"\n\t\t请输入要查学生性别:");
scanf("%s",&sex);
for(i=0;i 26、 %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***************************************** 27、");
}
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()/*修改函数*/
28、
{
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 29、)==0)
{j=i;
printf("请选取您要修改学生信息内容:\n");
printf("+--------------------------+\n");
printf("| 姓名 请按 1 |\n");
printf("| 班级 请按 2 |\n");
printf("| 年龄 请按 3 |\n");
printf("| 性别 请按 4 |\n");
printf("| 出生年月 30、 请按 5 |\n");
printf("| 地址 请按 6 |\n");
printf("| 电话 请按 7 |\n");
printf("| 课程 请按 8 |\n");
printf("| 成绩 请按 9 |\n");
printf("| 取消 请按 0 |\n");
printf("+--------------------------+\n");
31、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("请输入新班级:");
32、 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);
33、 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:p 34、rintf("请输入新电话:");
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);
str 35、cpy(score,stu[j].score);break;
default:
printf("\n无效选项!");
break;
}
}
printf("\n\t\t按回车键返回主菜单:");
getchar();
getchar(); //输入回车键
return;
}else
printf("提示:无学生数据,请输入数据!");
}
void sc()/*删除函数 36、/
{
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 37、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].cours 38、e);
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 39、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 40、
{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", 41、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************************************************");
}
}
}
四、 总结
在这为期一周课程设计中,我发现了诸多问题,也正是由于发现了问题,我也学到了诸多东西。在写程序过程中总是会发现许多错误,并且发现自己诸多知识都没掌握好,因此在开始设计之前我把课本后几章又看了一遍。在写时候,我也是把书放在旁边,随时翻阅。这不但让我巩固了已学到知识,也让我弄懂了诸多问题。在这一周里,诸多时候程序没有错误却无法运营,本来束手无策我也学会通过调试程序来发现问题所在,然后解决问题。通过这一周实践操作,我学到了诸多有用东西,这无论是对后来学习还是生活均有无比重要价值。






