哈尔滨理工大学
软件与微电子学院
《结构化程序设计(C)》
项目实践报告
题 目: | 学生学籍信息管理系统 |
班 级: | 软件18- 1 班 |
专 业: | 软件工程 |
姓 名: | 张立辉 |
学 号: | 1814010130 |
指导教师: | 姚登举 |
日 期: | 2018年12月28日 |
哈尔滨理工大学软件与微电子学院
目录
一、系统需求分析--------------------------------------------------------------------------------2
二、系统结构设计--------------------------------------------------------------------------------3
三、系统实现-------------------------------------------------------------------------------------4
1、核心代码---------------------------------------------------------------------------------------4
2、实现效果---------------------------------------------------------------------------------------4
四、系统测试-------------------------------------------------------------------------------------6
五、项目实践总结--------------------------------------------------------------------------------6
一、系统需求分析
本系统为学生学籍信息管理系统,主要实现的功能包括:
1 输入学生学籍信息
2 查找学生学籍信息
3 删除学生学籍信息
4 修改学生学籍信息
5 排序显示学生信息
0 退 出 程 序
1. 菜单功能
提示用户选择不同的功能做到简洁
2. 数据输入功能
输入学生学籍信息
可根据用户需求自主选择继续输入或结束输入
3. 数据输出功能
显示全部学生信息
显示排序后的全部学生信息
4. 数据查询功能
显示特定学号学生信息。
显示特定姓名学生。
显示同一性别(年龄,籍贯,系别,专业,班级)的所有学生。
可根据用户需求选择不同显示方式,尽可能做到人性化
5. 数据添加功能
添加学生学籍信息
6. 数据修改功能
修改学生学籍信息。
选择单独修改某一学生某一特定学籍信息或全部修改该学生所有学籍信息。
7. 数据删除功能
删除特定学生学籍信息
二、系统结构设计
按照系统需求分析结果,采用模块化程序设计思想,系统的整体结构设计如下:
1. 系统中的数据定义
(1)定义结构体类型student[]用于表示学生的相关信息
struct student//定义一个结构体
{
char num[20];
char name[20];
char sex[20];
char age[20];
char sheng[20];
char shi[20];
char xi[20];
char zhuanye[20];
char banji[20];
}stu[100];
(2)定义数组类型stu[]用于表示学生名称
stu[100];
int i=0;
2. 主程序(main函数)流程设计
2. 输入(输入函数)流程设计
3. 查找(查找函数)流程设计
4. 删除(删除函数)流程设计
5. 修改(修改函数)流程设计
6. 显示(显示函数)流程设计
三、系统实现
1.核心代码
#include <stdio.h>
#include <string.h>
#include <windows.h>
struct student//定义一个结构体
{
char num[20];
char name[20];
char sex[20];
char age[20];
char sheng[20];
char shi[20];
char xi[20];
char zhuanye[20];
char banji[20];
}stu[100];
int i=0;
void main()//主函数
{
system("title love 小傻彤");
void shuru();//声明输入函数
void chazhao();//声明查找函数
void shanchu();//声明删除函数
void xiugai();//声明修改函数
void xianshi();//声明显示函数
void paixu();//声明排序函数
int choice;
do{
system("cls");
system("color 80");
printf("\n_______________________________________");
printf("\n| 欢迎使用张立辉制作的程序 |");
printf("\n|-----------学生学籍管理系统----------|");
printf("\n| *******菜单******* |");
printf("\n| < 1.输入学生学籍信息 > |");
printf("\n| < 2.查找学生学籍信息 > |");
printf("\n| < 3.删除学生学籍信息 > |");
printf("\n| < 4.修改学生学籍信息 > |");
printf("\n| < 5.排序显示学生信息 > |");
printf("\n| < 0.退 出 程 序 > |");
printf("\n|_____________________________________|");
printf("\n请输入要使用的功能:");
scanf("%d",&choice);
printf("\n");//为了美观
switch(choice)//多分支选择语句
{
case 1:
shuru();
break;//调用输入函数
case 2:
chazhao();
break;//调用查找函数
case 3:
shanchu()
;break;//调用删除函数
case 4:
xiugai();
break;//调用修改函数
case 5:
paixu();
break;//调用排序函数
case 0:
system("cls");
system("color 90");
printf("\t感谢使用!\n\n\n");
system("pause");
return ;//输出一条语句后结束整个程序
default:
system("cls");
system("color 90");
printf("\n错误\n");
system("pause");
}
}
while(choice!=0);//多组输入(do-while语句)
}
void shuru()//输入函数
{
system("color 90");
int j;
system("cls");
printf(" *******学生学籍管理系统******\n");
printf(" ********录入信息*******");
printf("\n_______________________________________");
printf("\n| 《使用说明》 |");
printf("\n| |");
printf("\n| 以此按提示输入学生学籍信息 |");
printf("\n| |");
printf("\n|_____________________________________|");
printf("\n");
system("pause");
system("cls");
printf("\n请输入学号\n");
scanf("%s",stu[i].num);
printf("请输入姓名\n");
scanf("%s",stu[i].name);
printf("请输入年龄\n");
scanf("%s",stu[i].age);
printf("请输入性别\n");
scanf("%s",stu[i].sex);
printf("请输入籍贯,省-市\n");
scanf("%s%s",stu[i].sheng,stu[i].shi);
printf("请输入系别\n");
scanf("%s",stu[i].xi);
printf("请输入专业\n");
scanf("%s",stu[i].zhuanye);
printf("请输入班级\n");
scanf("%s",stu[i].banji);
i++;
printf("请问是否继续输入 1(是) 2(否)将返回主菜单\n");
scanf("%d",&j);
if(j==1)//如果输入的是1,继续进行输入操作
{
shuru();
}
else
{
return;
}
}
void chazhao()//查找函数
{
system("color A0");
system("cls");
char t[20];
int choice;
int p,j;
printf(" *******学生学籍管理系统******\n");
printf(" ********查找信息*******");
printf("\n_______________________________________");
printf("\n| 《使用说明》 |");
printf("\n| |");
printf("\n| 以此按提示查找学生学籍信息 |");
printf("\n| < 1.按学号查找 > |");
printf("\n| < 2.按姓名查找 > |");
printf("\n| < 3.按年龄查找 > |");
printf("\n| < 4.按性别查找 > |");
printf("\n| < 5.按省份查找 > |");
printf("\n| < 6.按城市查找 > |");
printf("\n| < 7.按系别查找 > |");
printf("\n| < 8.按专业查找 > |");
printf("\n| < 9.按班级查找 > |");
printf("\n| |");
printf("\n|_____________________________________|");
printf("\n请输入要使用的功能:");
scanf("%d",&choice);
switch(choice)
{
case 1:
system("cls");
printf("请输入查找学生学号\n");
scanf("%s",t);
for(j=0;j<=i;j++)
{
if(strcmp(stu[j].num,t)==0)//strcmp(a,b)字符串比较
{
printf("学生信息如下\n");
printf("姓名: %s\n",stu[j].name);
printf("年龄: %s\n",stu[j].age);
printf("性别: %s\n",stu[j].sex);
printf("籍贯: %s%s\n",stu[j].sheng,stu[j].shi);
printf("系别: %s\n",stu[j].xi);
printf("专业: %s\n",stu[j].zhuanye);
printf("班级: %s\n",stu[j].banji);
system("pause");
return;
}
}
printf("\n查无此人\n");
printf("是否继续查找 1(是) 2(否)将返回主菜单\n");
scanf("%d",&p);
if(p==1)
{
chazhao();
}
else
{
return;
}
case 2:
system("cls");
printf("请输入查找学生姓名\n");
scanf("%s",t);
for(j=0;j<=i;j++)
{
if(strcmp(stu[j].name,t)==0)//strcmp(a,b)字符串比较
{
printf("学生信息如下\n");
printf("姓名: %s\n",stu[j].name);
printf("年龄: %s\n",stu[j].age);
printf("性别: %s\n",stu[j].sex);
printf("籍贯: %s%s\n",stu[j].sheng,stu[j].shi);
printf("系别: %s\n",stu[j].xi);
printf("专业: %s\n",stu[j].zhuanye);
printf("班级: %s\n",stu[j].banji);
system("pause");
return;
}
}
printf("\n查无此人\n");
printf("是否继续查找 1(是) 2(否)将返回主菜单\n");
scanf("%d",&p);
if(p==1)
{
chazhao();
}
else
{
return;
}
case 3:
system("cls");
printf("请输入查找学生年龄\n");
scanf("%s",t);
for(j=0;j<=i;j++)
{
if(strcmp(stu[j].age,t)==0)//strcmp(a,b)字符串比较
{
printf("学生信息如下\n");
printf("姓名: %s\n",stu[j].name);
printf("年龄: %s\n",stu[j].age);
printf("性别: %s\n",stu[j].sex);
printf("籍贯: %s%s\n",stu[j].sheng,stu[j].shi);
printf("系别: %s\n",stu[j].xi);
printf("专业: %s\n",stu[j].zhuanye);
printf("班级: %s\n",stu[j].banji);
}
}
system("pause");
return;
case 4:
system("cls");
printf("请输入查找学生性别\n");
scanf("%s",t);
for(j=0;j<=i;j++)
{
if(strcmp(stu[j].sex,t)==0)//strcmp(a,b)字符串比较
{
printf("学生信息如下\n");
printf("姓名: %s\n",stu[j].name);
printf("年龄: %s\n",stu[j].age);
printf("性别: %s\n",stu[j].sex);
printf("籍贯: %s%s\n",stu[j].sheng,stu[j].shi);
printf("系别: %s\n",stu[j].xi);
printf("专业: %s\n",stu[j].zhuanye);
printf("班级: %s\n",stu[j].banji);
}
}
system("pause");
return;
case 5:
system("cls");
printf("请输入查找学生省份\n");
scanf("%s",t);
for(j=0;j<=i;j++)
{
if(strcmp(stu[j].sheng,t)==0)//strcmp(a,b)字符串比较
{
printf("学生信息如下\n");
printf("姓名: %s\n",stu[j].name);
printf("年龄: %s\n",stu[j].age);
printf("性别: %s\n",stu[j].sex);
printf("籍贯: %s%s\n",stu[j].sheng,stu[j].shi);
printf("系别: %s\n",stu[j].xi);
printf("专业: %s\n",stu[j].zhuanye);
printf("班级: %s\n",stu[j].banji);
}
}
system("pause");
return;
case 6:
system("cls");
printf("请输入查找学生城市\n");
scanf("%s",t);
for(j=0;j<=i;j++)
{
if(strcmp(stu[j].shi,t)==0)//strcmp(a,b)字符串比较
{
printf("学生信息如下\n");
printf("姓名: %s\n",stu[j].name);
printf("年龄: %s\n",stu[j].age);
printf("性别: %s\n",stu[j].sex);
printf("籍贯: %s%s\n",stu[j].sheng,stu[j].shi);
printf("系别: %s\n",stu[j].xi);
printf("专业: %s\n",stu[j].zhuanye);
printf("班级: %s\n",stu[j].banji);
}
}
system("pause");
return;
case 7:
system("cls");
printf("请输入查找学生系别\n");
scanf("%s",t);
for(j=0;j<=i;j++)
{
if(strcmp(stu[j].xi,t)==0)//strcmp(a,b)字符串比较
{
printf("学生信息如下\n");
printf("姓名: %s\n",stu[j].name);
printf("年龄: %s\n",stu[j].age);
printf("性别: %s\n",stu[j].sex);
printf("籍贯: %s%s\n",stu[j].sheng,stu[j].shi);
printf("系别: %s\n",stu[j].xi);
printf("专业: %s\n",stu[j].zhuanye);
printf("班级: %s\n",stu[j].banji);
}
}
system("pause");
return;
case 8:
system("cls");
printf("请输入查找学生专业\n");
scanf("%s",t);
for(j=0;j<=i;j++)
{
if(strcmp(stu[j].zhuanye,t)==0)//strcmp(a,b)字符串比较
{
printf("学生信息如下\n");
printf("姓名: %s\n",stu[j].name);
printf("年龄: %s\n",stu[j].age);
printf("性别: %s\n",stu[j].sex);
printf("籍贯: %s%s\n",stu[j].sheng,stu[j].shi);
printf("系别: %s\n",stu[j].xi);
printf("专业: %s\n",stu[j].zhuanye);
printf("班级: %s\n",stu[j].banji);
}
}
system("pause");
return;
case 9:
system("cls");
printf("请输入查找学生班级\n");
scanf("%s",t);
for(j=0;j<=i;j++)
{
if(strcmp(stu[j].banji,t)==0)//strcmp(a,b)字符串比较
{
printf("学生信息如下\n");
printf("姓名: %s\n",stu[j].name);
printf("年龄: %s\n",stu[j].age);
printf("性别: %s\n",stu[j].sex);
printf("籍贯: %s%s\n",stu[j].sheng,stu[j].shi);
printf("系别: %s\n",stu[j].xi);
printf("专业: %s\n",stu[j].zhuanye);
printf("班级: %s\n",stu[j].banji);
}
}
system("pause");
return;
}
}
void shanchu()//删除函数
{
system("color C0");
system("cls");
char t[20];
int m,j,k,p,q;
system("cls");
printf(" *******学生学籍管理系统******\n");
printf(" ********删除信息*******");
printf("\n_______________________________________");
printf("\n| 《使用说明》 |");
printf("\n| |");
printf("\n| 以此按提示删除学生学籍信息 |");
printf("\n| |");
printf("\n|_____________________________________|");
printf("\n");
system("pause");
system("cls");
printf("\n_______________________________________");
printf("\n| 《删除说明》 |");
printf("\n| |");
printf("\n| 以此按提示删除学生学籍信息 |");
printf("\n| < 1.按学号删除 > |");
printf("\n| < 2.按姓名删除 > |");
printf("\n| |");
printf("\n|_____________________________________|");
printf("\n请输入要使用的功能:");
scanf("%d",&p);
system("cls");
if(p==1)
{
printf("\n请输入删除学生学号\n");
scanf("%s",t);
for(j=0;j<=i;j++)
{
if(strcmp(stu[j].num,t)==0)//strcmp(a,b)字符串比较
{
printf("\n即将删除学号为 %s 的学生\n",stu[j].num);
printf("请问是否确认删除 1 (是) 2 (否)将返回主菜单\n");
scanf("%d",&m);
if(m==1)
{
for(k=j;k<i;k++)
{//strcpy(a,b)复制b到a中去
strcpy(stu[k].num,stu[k+1].num);
strcpy(stu[k].name,stu[k+1].name);
strcpy(stu[k].sex,stu[k+1].sex);
strcpy(stu[k].age,stu[k+1].age);
strcpy(stu[k].sheng,stu[k+1].sheng);
strcpy(stu[k].shi,stu[k+1].shi);
strcpy(stu[k].xi,stu[k+1].xi);
strcpy(stu[k].zhuanye,stu[k+1].zhuanye);
strcpy(stu[k].banji,stu[k+1].banji);
}
printf("\n该学生已成功删除!\n");
i--;
printf("是否继续删除 1(是) 2(否)将返回主菜单\n");
scanf("%d",&p);
if(p==1)
{
shanchu();
return;
}
else
{
return;
}
}
else
{
return;
}
}
}
printf("\n查无此人\n");
printf("是否继续删除 1(是) 2(否)将返回主菜单\n"),
scanf("%d",&q);
if(q==1)
{
shanchu();
return;
}
else
{
return;
}
return;
}
else if(p==2)
{
printf("\n请输入删除学生姓名\n");
scanf("%s",t);
for(j=0;j<=i;j++)
{
if(strcmp(stu[j].name,t)==0)//strcmp(a,b)字符串比较
{
printf("\n即将删除姓名为 %s 的学生\n",stu[j].num);
printf("请问是否确认删除 1 (是) 2 (否)将返回主菜单\n");
scanf("%d",&m);
if(m==1)
{
for(k=j;k<i;k++)
{//strcpy(a,b)复制b到a中去
strcpy(stu[k].num,stu[k+1].num);
strcpy(stu[k].name,stu[k+1].name);
strcpy(stu[k].sex,stu[k+1].sex);
strcpy(stu[k].age,stu[k+1].age);
strcpy(stu[k].sheng,stu[k+1].sheng);
strcpy(stu[k].shi,stu[k+1].shi);
strcpy(stu[k].xi,stu[k+1].xi);
strcpy(stu[k].zhuanye,stu[k+1].zhuanye);
strcpy(stu[k].banji,stu[k+1].banji);
}
printf("\n该学生已成功删除!\n");
i--;
printf("是否继续删除 1(是) 2(否)将返回主菜单\n");
scanf("%d",&p);
if(p==1)
{
shanchu();
return;
}
else
{
return;
}
}
else
{
return;
}
}
}
printf("\n查无此人\n");
printf("是否继续删除 1(是) 2(否)将返回主菜单\n"),
scanf("%d",&q);
if(q==1)
{
shanchu();
return;
}
else
{
return;
}
return;
}
else
{
printf("\n错误!!!");
return;
}
}
void xiugai()//修改函数
{
system("color E0");
system("cls");
char t[20];
int p,j,q,m;
printf(" *******学生学籍管理系统******\n");
printf(" ********修改信息*******");
printf("\n_______________________________________");
printf("\n| 《使用说明》 |");
printf("\n| |");
printf("\n| 以此按提示修改学生学籍信息 |");
printf("\n| |");
printf("\n|_____________________________________|");
printf("\n");
system("pause");
system("cls");
printf("请输入修改学生学号\n");
scanf("%s",t);
for(j=0;j<=i;j++)
{
if(strcmp(stu[j].num,t)==0)
{
system("cls");
printf("\n_______________________________________");
printf("\n| 《修改说明》 |");
printf("\n| |");
printf("\n| 以此按提示查找学生学籍信息 |");
printf("\n| < 1.修改学号 > |");
printf("\n| < 2.修改姓名 > |");
printf("\n| < 3.修改年龄 > |");
printf("\n| < 4.修改性别 > |");
printf("\n| < 5.修改籍贯 > |");
printf("\n| < 6.修改系别 > |");
printf("\n| < 7.修改专业 > |");
printf("\n| < 8.修改班级 > |");
printf("\n| < 9.修改全部 > |");
printf("\n| |");
printf("\n|_____________________________________|");
printf("\n请输入要使用的功能:");
scanf("%d",&m);
system("cls");
switch(m)
{
case 1:
printf("\n请输入修改后的学生学号: ");
scanf("%s",stu[j].num);
break;
case 2:
printf("\n请输入修改后的学生姓名: ");
scanf("%s",stu[j].name);
break;
case 3:
printf("\n请输入修改后的学生年龄: ");
scanf("%s",stu[j].age);
break;
case 4:
printf("\n请输入修改后的学生性别: ");
scanf("%s",stu[j].sex);
break;
case 5:
printf("\n请输入修改后的学生籍贯:");
scanf("%s%s",stu[j].sheng,stu[j].shi);
break;
case 6:
printf("\n请输入修改后的系别: ");
scanf("%s",stu[j].xi);
break;
case 7:
printf("\n请输入修改后的专业: ");
scanf("%s",stu[j].zhuanye);
break;
case 8:
printf("\n请输入修改后的班级: ");
scanf("%s",stu[j].banji);
break;
case 9:
printf("\n请输入修改后的学生学号:\n ");
scanf("%s",stu[j].num);
printf("\n请输入修改后的学生姓名: \n");
scanf("%s",stu[j].name);
printf("\n请输入修改后的学生年龄: \n");
scanf("%s",stu[j].age);
printf("\n请输入修改后的学生性别:\n ");
scanf("%s",stu[j].sex);
printf("\n请输入修改后的学生籍贯:\n");
scanf("%s%s",stu[j].sheng,stu[j].shi);
printf("\n请输入修改后的系别:\n ");
scanf("%s",stu[j].xi);
printf("\n请输入修改后的专业:\n ");
scanf("%s",stu[j].zhuanye);
printf("\n请输入修改后的班级:\n ");
scanf("%s",stu[j].banji);
break;
default:printf("错误");
system("pause");
return;
}
printf("\n修改成功\n");
printf("是否继续修改 1(是) 2(否)将返回主菜单\n");
scanf("%d",&p);
if(p==1)
{
xiugai();
return;
}
else
{
return;
}
system("pause");
return;
}
}
printf("n查无此人n");
printf("是否继续修改1(是) 2(否)将返回主菜单n"),
scanf("%d",&q);
if(q==1)
{
xiugai();
return;
}
else
{
return;
}
return;
}
void paixu()
{
system("color B0");
system("cls");
int j,t,p;
struct student temp;
printf(" *******学生学籍管理系统******\n");
printf(" ********显示信息*******");
printf("\n_______________________________________");
printf("\n| 《显示说明》 |");
printf("\n| |");
printf("\n| 以此按提示查找学生学籍信息 |");
printf("\n| < 1.从小到大显示 > |");
printf("\n| < 2.从大到小显示 > |");
printf("\n| |");
printf("\n|_____________________________________|");
printf("\n请输入要使用的功能:");
scanf("%d",&p);
system("cls");
if(p==1)
{
for(j=0;j<i-1;j++)
{
for(t=0;t<i-j-1;t++)
{
if(strcmp(stu[t].num,stu[t+1].num)>0)
{
temp=stu[t];
stu[t]=stu[t+1];
stu[t+1]=temp;
}
}
}
}
else if(p==2)
{
for(j=0;j<i-1;j++)
{
for(t=0;t<i-j-1;t++)
{
if(strcmp(stu[t].num,stu[t+1].num)<0)
{
temp=stu[t];
stu[t]=stu[t+1];
stu[t+1]=temp;
}
}
}
}
else
{
printf("\n错误,请重新输入\n");
system("pause");
paixu();
return;
}
printf("\n一共有%d个学生信息\n",i);
printf("\n排序后学生信息列表为:\n");
for(j=0;j<i;j++)
{
printf("\n第%d个学生信息如下:\n",j+1);
printf("学号:%s\n",stu[j].num);
printf("姓名: %s\n",stu[j].name);
printf("年龄: %s\n",stu[j].age);
printf("性别: %s\n",stu[j].sex);
printf("籍贯: %s%s\n",stu[j].sheng,stu[j].shi);
printf("系别: %s\n",stu[j].xi);
printf("专业: %s\n",stu[j].zhuanye);
printf("班级: %s\n",stu[j].banji);
}
system("pause");
return;
}
2.实现效果
(1)主界面实现效果如图1所示:
(2)录入学生信息界面实现效果如图2图3所示:
(3)查找学生信息功能界面实现效果如图4图5所示:
4)删除学生信息功能界面实现效果如图6图7图8所示:
5)修改学生信息功能界面实现效果如图9图10图11所示:
6)显示学生信息功能界面实现效果如图12图13所示:
四、系统测试
修改删除以及查找部分希望系统更加人性化,并做了较多尝试,存在着无故结束函数并返回错误值的情况,但都已一一解决。
五、项目实践总结
通过本次项目实践,对所学知识有了较好的总结,并发现了自己诸多不足,例如在修改系统更加人性化时候发生了诸多错误,体现出了自己对基础知识部分熟练程度的欠缺以及对指针部分掌握的不足,对结构体部分了解的不充分,在以后的学习中会对自己的不足进行进一步完善。