一、课程设计与目的
根据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容;通过调试典型例题或习题积累调试C程序的经验;通过完成辅导教材中的编程题,逐渐培养学生的编程能力、用计算机解决实际问题的能力。
二、课程设计基本要求
1、用数据结构的方法设计出的学生信息管理系统,能实现对学生信息的简单管理。
2、具体要求:
建立一个若干学生的信息登记表,每个学生的信息包括:学号、姓名、性别、成绩和系,建立一个管理系统。
程序运行时显示一个菜单形式,例如
**********学生信息管理系统**********
| 1. 输入信息 |
| 2. 显示所有信息|
| 3. 信息按学号排序|
| 4. 插入一条记录|
| 5. 删除一条记录|
| 6. 查找 |
| 7. 修改一条记录 |
| 8. 退出 |
其中:
(1)输入若干条记录
(2)显示所有记录
(3)按学号排序
(4)插入一些记录
(5)按学号查找,删除一条记录
(6)查找并显示一条记录
(7)修改一条记录
(8)退出程序
三、系统功能和结构
1、系统的功能
1设计一个简单学生信息管理系统,用户可以通过系统简单的管理学生信息。
2设计出一个菜单可以让用户选择所执行的内容。
3建立单结构体,输入学生的信息(学号、姓名和、性别、系和成绩)。
4根据单结构体的特点采用冒泡法以总分为标准排序学生信息。
5根据用户输入的学号信息,固定的查询学生的详细信息。
6根据用户的需求删除或者添加某学生的信息。
2、概要设计
主要数据结构描述
typedef struct student //定义结构类型
{
char num[15]; //学号
char name[20]; //姓名
char sex; //性别
int score; //成绩
char sdept[10]; //系
} ;
student stu[100]; //结构体数组变量
算法分析及程序流程图
该项目划分为7个模块加退出,主函数可以分别调用这些模块,然后通过个模块来实现各种需要的功能。
四、程序如何实现
模块详细设计
根据上面的流程图,下面分析每个模块具体的功能,包括每个模块的参数和得出的结果
函数名 int Input(student stu[],int n) //输入信息
入口参数 无
返回值 无
模块功能 建立单结构体并赋值,即录入学生的信息
模块1
函数名 void Display(student stu[],int n) //显示所有信息
入口参数 无
返回值 无
模块功能 用于显示和方便查找学号的学生成绩
模块2
函数名 void Sort_by_num(student stu[],int n) //对输入的信息按学号排序
入口参数 无
返回值 无
模块功能 用于对学生按学号排序便于查看
模块3
函数名 int Insert_a_record(student stu[],int n) //插入一些记录
入口参数 无
返回值 无
模块功能 用于追加新的学生信息
模块4
函数名 int Delete_a_record(student stu[],int n) //查找,删除一个记录
入口参数 无
返回值 无
模块功能 用于删除学生一些信息
模块5
函数名 void Query_a_record(student stu[],int n) //查找并显示一个记录
入口参数 无
返回值 无
模块功能 用于查找并显示一个记录
模块6
函数名 void Replace_a_record(student stu[],int n) //按学号查找修改
入口参数 无
返回值 无
模块功能 按学号查找并修改一个学生信息
模块7
函数名 exit(8)
入口参数 无
返回值 无
模块功能 退出应用程序
模块8
五、程序源代码
程序正文部分
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
typedef struct student //定义结构类型
{
char num[15]; //学号
char name[20]; //姓名
char sex; //性别
int score; //成绩
char sdept[10]; //系
} ;
student stu[100]; //结构体数组变量
int menu_select() //菜单函数声明
{
char c;
do{
system("cls"); /*运行前清屏*/ ;
printf("\t\t**********学生信息管理系统**********\n"); /*菜单选择*/
printf("\t\t | 1. 输入信息 |\n");
printf("\t\t | 2. 显示所有信息|\n");
printf("\t\t | 3. 信息按学号排序|\n");
printf("\t\t | 4. 插入一条记录|\n");
printf("\t\t | 5. 删除一条记录|\n");
printf("\t\t | 6. 查找 |\n");
printf("\t\t | 7. 修改一条记录 |\n");
printf("\t\t | 8. 退出 |\n");
printf("\t\t************************************\n");
printf("\t\t\t 你的选择是(1-8):");
c=getchar(); //你的选择c
}while(c<'1'||c>'8');
return(c-'0');
}
int Input(student stu[],int n) //输入信息
{ int i=0;
char more;
while(more!='n'&&more!='N')
{printf("\t\t\t 请输入学生学号:");
scanf("\t\t\t %s",&stu[n+i].num);
printf("\t\t\t 请输入学生姓名:");
scanf("\t\t\t %s",&stu[n+i].name);
printf("\t\t\t 请输入学生性别:");
scanf("\t\t\t %c",&stu[n+i].sex);
printf("\t\t\t 请输入学生成绩:");
scanf("\t\t\t %d",&stu[n+i].score);
printf("\t\t\t 请输入学生所在系:");
scanf("\t\t\t %s",&stu[n+i].sdept);
printf("\t\t\t 您有更多信息要输入吗?Y/N:");
scanf("\t\t\t %c",&more);
i++;
}return(n+i);
}
void Display(student stu[],int n) //显示所有信息
{ int i;
printf(" ---------------------------------------------------------------\n"); /*格式头*/
printf(" | 学 号 | 姓 名 | 性别 | 成绩 | 所在系 |\n");
printf(" ---------------------------------------------------------------\n");
for(i=1;i<=n;i++)
{printf(" | %-15s| %-11s| %-5c| %-6d| %-12s|\n",stu[i-1].num,stu[i-1].name,
stu[i-1].sex,stu[i-1].score,stu[i-1].sdept );
printf(" ---------------------------------------------------------------\n"); //分格行
}
printf("\t\t\t");
system("pause");
}
void Sort_by_num(student stu[],int n) //对输入的信息按学号排序
{ int i,j;
char l[15],t[20],q,k[10];
int p;
for(i=0;i<=n-1;i++) //起泡法排序
for(j=0;j<n-1-i;j++)
if(strcmp(stu[j].num,stu[j+1].num)>0)
{ l=stu[j].num;
stu[j].num=stu[j+1].num;
stu[j+1].num=l;
t=stu[j].name;
stu[j].name=stu[j+1].name;
stu[j+1].name=t;
q=stu[j].sex;
stu[j].sex=stu[j+1].sex;
stu[j+1].sex=q;
p=stu[j].score;
stu[j].score=stu[j+1].score;
stu[j+1].score=p;
k=stu[j].sdept;
stu[j].sdept=stu[j+1].sdept;
stu[j+1].sdept=k;
}
}
int Insert_a_record(student stu[],int n) //插入一些记录
{ int i=0;
char more;
while(more!='n'&&more!='N')
{printf("\t\t\t 请输入学生学号:");
scanf("\t\t\t %s",&stu[n+i].num);
printf("\t\t\t 请输入学生姓名:");
scanf("\t\t\t %s",&stu[n+i].name);
printf("\t\t\t 请输入学生性别:");
scanf("\t\t\t %c",&stu[n+i].sex);
printf("\t\t\t 请输入学生成绩:");
scanf("\t\t\t %d",&stu[n+i].score);
printf("\t\t\t 请输入学生所在系:");
scanf("\t\t\t %s",&stu[n+i].sdept);
Sort_by_num(stu, n);
printf("\t\t\t Insert Successed!\n"); //插入成功
printf("\t\t\t 您有更多信息要输入吗?Y/N:");
scanf("\t\t\t %c",&more);
i++;
}return(n+i);
}
int Delete_a_record(student stu[],int n) //查找,删除一个记录
{ char l[15];
int i=0, j;
printf("\t\t\t 请输入学生学号:"); //按学号查找
scanf("\t\t\t %s",l);
while(strcmp(stu[i].num,l)!=0 && i<n)i++; //查找判断
if(i==n)
{printf("\t\t\tnot find!\n"); //查找失败
return(n);}
for(j=i;j<n-1;j++) //删除操作
{ strcpy(stu[j].num,stu[j+1].num);
strcpy(stu[j].name,stu[j+1].name);
stu[j].sex=stu[j+1].sex;
stu[j].score=stu[j+1].score;
strcpy(stu[j].sdept,stu[j+1].sdept);
}
printf("\t\t\t Delete Successed!\n"); //删除成功
return(n-1) ;
}
void Query_a_record(student stu[],int n) //查找并显示一个记录
{ char l[15];
int i=0;
printf("\t\t\t 请输入学生学号:"); //按学号查找
scanf("\t\t\t %s",l);
while(strcmp(stu[i].num,l)!=0 && i<n)i++; //查找判断
if(i==n)
{ printf("\t\t\tnot find!\n"); //查找失败
return;
}
printf("\t\t\t 学生的学号:%s\n",stu[i].num); //输出该学生信息
printf("\t\t\t 学生的姓名:%s\n",stu[i].name);
printf("\t\t\t 学生的性别:%c\n",stu[i].sex);
printf("\t\t\t 学生的成绩:%d\n",stu[i].score);
printf("\t\t\t 学生所在系:%s\n",stu[i].sdept);
}
void Replace_a_record(student stu[],int n) //按学号查找修改
{
char choice,l[15];
int i=0;
printf("\t\t\t 请输入学生学号:"); //按学号查找
scanf("\t\t\t %s",l);
while(strcmp(stu[i].num,l)!=0 && i<n)i++; //查找判断
if(i==n)
{printf("\t\t\tnot find!\n"); //查找失败
return;}
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)取消 请按 5 \n");
printf("\t\t\t 请输入您的选择:\n");
scanf("%d", &choice);
switch(choice)
{
case 1:
printf("\t\t\t 请输入新姓名:\n");
scanf("%d", stu[i].name);
break;
case 2:
printf("\t\t\t 请输入新性别:\n");
scanf("%s", stu[i].sex);
printf("\t\t\t");
system("pause");
break;
case 3:
printf("\t\t\t 请输入新成绩:\n");
scanf("%s", stu[i].score);
printf("\t\t\t");
system("pause");
break;
case 4:
printf("\t\t\t 请输入新的所在系:\n");
scanf("%s", stu[i].sdept);
printf("\t\t\t");
system("pause");
break;
case 5:
printf("您选择了取消,Bye-Bye!\n") ;
exit;
}
}
void main() //主函数
{
int n=0;
for(;;) //相当于while(1)语句,不设初值,认为表达式2为真值,循
//环变量不增值,无终止的执行循环
{
switch(menu_select())
{
case 1:
printf("\t\t\tInput Records\n"); //输入若干条记录
n=Input(stu,n);
break;
case 2:
printf("\t\t\tDisplay All Records\n"); //显示所有记录
Display(stu,n);
break;
case 3:
printf("\t\t\tSort\n");
Sort_by_num(stu,n); //按学号排序
printf("\t\t\tSort Suceessed!\n");
printf("\t\t\t");
system("pause");
break;
case 4:
printf("\t\t\tInsert a Record\n");
n=Insert_a_record(stu,n); //插入一些记录
printf("\t\t\t");
system("pause");
break;
case 5:
printf("\t\t\tDelete a Record\n");
n=Delete_a_record(stu,n); //按姓名查找,删除一条记录
printf("\t\t\t");
system("pause");
break;
case 6:
printf("\t\t\tQuery\n");
Query_a_record(stu,n); //查找并显示一个记录
printf("\t\t\t");
system("pause");
break;
case 7:
printf("\t\t\treplace\n"); //修改一条信息
Replace_a_record(stu,n);
printf("\t\t\t");
system("pause");
break;
case 8:
printf("\t\t\tHave a Good Luck,Bye-bye!\n"); //结束程序
printf("\t\t\t");
system("pause");
exit(8);
}
} }
六、 程序的运行与实现
(1)输入若干条记录
(2)显示所有记录
(3)按学号排序
(4)插入一些记录
(5)按学号查找,删除一条记录
(6)查找并显示一条记录
(7)修改一条记录
(8)退出程序
温馨提示:答案为网友推荐,仅供参考