目录

  • 需求分析
  • 问题分析
  • 开发阶段

需求分析

总体需求

学员信息管理系统支持以下功能

  • 增加学员信息功能
  • 删除学员信息功能
  • 查询学员信息功能
  • 修改学员信息功能
  • 输出所有学员信息功能
  • 退出系统

其他需求

  • 学员信息需求
  • 学号4位数字
  • 姓名不能超过20个字符
  • 地址不能超过30个字符
  • 手机号码必须为11位数字
  • 成绩在0-100之间
  • 初始状态系统保持2名学员信息
  • 必要的信息提示
  • 例如:姓名长度不正确、手机号码长度不正确等。

问题分析

全局变量

Char  students[50][200];  //存储50个学员信息,每一行代表一个学员信息,每个信息项之间用”$“隔开

int  stu_num;  //当前已经存储的学员的个数

功能模块划分

功能模块分析

开发阶段

阶段划分

第一阶段

实现界面搭建和数据初始化

实现效果

难点分析

1.变量和函数的定义

2.初始化函数init()

3.输出学员信息的listStu()函数

第二阶段

实现输入学员信息

实现效果

变量和函数的定义

每项信息的存储

Flag用来标识前一项信息是否录入正确,本项信息是否录入完成。

整数转换成字符数组函数:sprintf(字符数组,”%d”,整数)

每项操作完成后返回主菜单

第三阶段

实现按照学号删除学员信息

实现效果

删除成功提示删除成功。

删除失败提示未找到该学员。

变量和函数的定义

getStuRowByNo()函数的实现

deleteByNo()函数的实现

删除原理:二维数组类似表格,删除所在行即把这一行之后的数据依次覆盖前一行的数据。注意:删除一行数据后,需要把stu_num变量减去1。

第四阶段

格式化显示学员信息

实现效果

变量和函数的定义

修改listStu()函数。增加数据数据格式转换函数analyse()。

analyse()函数的实现

功能:解析学员信息

实现:

修改listStu()函数

第五阶段

根据学号查找学生信息

实现效果

变量和函数的定义

queryByNo()函数的实现

功能:根据学号,查找学员信息并显示

第六阶段

修改学员信息

实现效果

变量和函数的定义

modifyInfoByNo()函数的实现

功能:根据学号,修改该学员信息。如果存在该学员,则调用新增学生信息,覆盖之前的信息。

综合案例参考代码

带登录功能,数据字典使用结构体数组。

#include <stdio.h>
#include <stdlib.h>
#include <string.h> //学生信息结构体
struct Student{
int id;//学号
char name[20];//姓名
int age;//年龄
char gender[10];//性别
char classes[20];//班级
}; /*自定义函数声明*/
void init();
void login();
void menuAdmin();
void menuGuest();
void addStudent();
void deleteStudentById();
void modifyStudentById();
void getStudentById();
void listStudent();
int getStudentPos(int id); /*数据字典:全局变量*/
struct Student list[50];//定义结构体数组
int stu_num=3; //当前已经存储的学员的个数 /*主调函数*/
int main(){
init();//数据初始化
login();//登录
return 0;
} /*登录函数*/
void login(){
char name[20];//账号
char pwd[20];//密码
printf("\t请输入账号:");
scanf("%s",&name);
printf("\t请输入密码:");
scanf("%s",&pwd);
if(strcmp("admin",name)==0&&strcmp("123",pwd)==0){//管理员登录
menuAdmin();
}else{//游客登录
menuGuest();
} } /*后台菜单函数*/
void menuAdmin(){
int option;//用户的选择
printf("\t******************\n");
printf("\t|学员信息管理系统|\n");
printf("\t******************\n");
printf("\t1.输入学生资料\n");
printf("\t2.删除学生资料\n");
printf("\t3.查找学生资料\n");
printf("\t4.修改学生资料\n");
printf("\t5.输出学生资料\n");
printf("\t0.退出系统\n");
printf("\t******************\n");
printf("\t请选择操作:");
scanf("%d",&option);
switch(option){
case 1:
addStudent();//添加学生
menuAdmin();//递归
break;
case 2:
deleteStudentById();//删除学生信息
menuAdmin();//递归
break;
case 3:
getStudentById();//根据学号查询学生信息
menuAdmin();//递归
break;
case 4:
modifyStudentById();//编辑学生信息
menuAdmin();//递归
break;
case 5:
listStudent();//查询全部学生信息
menuAdmin();//递归
break;
case 0:printf("\t>>>感谢使用学生信息管理系统!\n");break;
default :printf("\t***输入错误!***\n");menuAdmin();//递归
}
} /*前台菜单函数*/
void menuGuest(){
int option;//用户的选择
printf("\t******************\n");
printf("\t|学员信息管理系统|\n");
printf("\t******************\n");
printf("\t1.查找学生资料\n");
printf("\t2.输出学生资料\n");
printf("\t0.退出系统\n");
printf("\t******************\n");
printf("\t请选择操作:");
scanf("%d",&option);
switch(option){
case 1:
getStudentById();//根据学号查询学生信息
menuGuest();
break;
case 2:
listStudent();//查询全部学生信息
menuGuest();
break;
case 0:printf("\t>>>感谢使用学生信息管理系统!\n");break;
default :printf("\t***输入错误!***\n");menuGuest();
}
} /*数据初始化*/
void init(){
struct Student zs; /* 声明 zs,类型为 Student */
struct Student ls; /* 声明 ls,类型为 Student */
struct Student ww; /* 声明 ww,类型为 Student */ /* zs 初始化 */
zs.id=2016001;
strcpy(zs.name, "张三");
zs.age=21;
strcpy(zs.gender, "男");
strcpy(zs.classes, "软件工程1班"); /* ls 初始化 */
ls.id=2016002;
strcpy(ls.name, "李四");
ls.age=18;
strcpy(ls.gender, "女");
strcpy(ls.classes, "软件工程2班"); /* ww 初始化 */
ww.id=2016048;
strcpy(ww.name, "王五");
ww.age=23;
strcpy(ww.gender, "男");
strcpy(ww.classes, "软件工程3班"); //结构体数组初始化
list[0]=zs;
list[1]=ls;
list[2]=ww;
} /*输入学生信息*/
void addStudent(){
printf("\t>>>请输入学生资料:\n");
struct Student student;
//从控制台输入学生信息
int id;
char name[50];
int age;
char gender[3];
char classes[50]; printf("\t请输入学号:");
scanf("%d",&id);
student.id=id; printf("\t请输入姓名:");
scanf("%s",name);
strcpy(student.name, name); printf("\t请输入年龄:");
scanf("%d",&age);
student.age=age; printf("\t请输入性别:");
scanf("%s",gender);
strcpy(student.gender, gender); printf("\t请输入班级:");
scanf("%s",classes);
strcpy(student.classes, classes); //把结构体添加到结构体数组中
list[stu_num]=student; stu_num++;//学生数量增加1个
} /*删除学生信息*/
void deleteStudentById(){
printf("\t>>>删除学生资料,请输入学号:");
int id,i;
scanf("%d",&id);
int pos=getStudentPos(id);//获取位置
if(pos==-1){//未找到提示
printf("\n\t********查无此人,请确认学号后再输入********\n");
return;//结束当前函数
}else{//删除
for(i=pos;i<stu_num;i++){
list[i]=list[i+1];
}
stu_num--;//学生人数减少一个
printf("\n\t********删除学号为%d的学生成功!********\n\n",id);
}
} /*根据学号查询学生结构体变量在数组中的位置*/
int getStudentPos(int id){
int pos=-1;//位置
int flag=0;//是否找到:0表示查无此人;1表示找到 int i;
//查找学生位置
for(i=0;i<stu_num;i++){
if(list[i].id==id){
pos=i;//找到该学生在结构体数组中的位置
flag=1;
break;
}
}
return pos;
} /*修改学生信息*/
void modifyStudentById(){
printf("\t>>>修改学生资料,请输入学号:");
int id;
scanf("%d",&id);
int pos=getStudentPos(id);//获取位置
if(pos==-1){//未找到提示
printf("\n\t********查无此人,请确认学号后再输入********\n");
return;//结束当前函数
}else{
//从控制台输入学生信息
char name[50];
int age;
char gender[3];
char classes[50]; printf("\t请输入新的姓名:");
scanf("%s",name);
strcpy(list[pos].name, name); printf("\t请输入新的年龄:");
scanf("%d",&age);
list[pos].age=age; printf("\t请输入新的性别:");
scanf("%s",gender);
strcpy(list[pos].gender, gender); printf("\t请输入新的班级:");
scanf("%s",classes);
strcpy(list[pos].classes, classes); printf("\n\t********修改学生信息成功!********\n\n");
}
} /*查询学生信息*/
void getStudentById(){
printf("\t>>>查找学生资料,请输入学号:");
int id;
scanf("%d",&id);
int pos=getStudentPos(id);//获取位置
if(pos==-1){//未找到提示
printf("\n\t********查无此人,请确认学号后再输入********\n");
return;//结束当前函数
}else{
//输出学生信息
printf("%d\t%s\t%d\t%s\t%s\n", list[pos].id,list[pos].name,list[pos].age,list[pos].gender,list[pos].classes);
}
} /*查询全部学生信息*/
void listStudent(){
printf("\t>>>学生资料列表:\n");
int i;
printf("学号\t姓名\t年龄\t性别\t班级\n");
for(i=0;i<stu_num;i++){
/* 输出学生列表信息 */
printf( "%d\t%s\t%d\t%s\t%s\n", list[i].id,list[i].name,list[i].age,list[i].gender,list[i].classes);
}
printf("\n");
}

  

C07 模块化开发信息管理系统案例的更多相关文章

  1. Android(java)学习笔记195:学生信息管理系统案例(SQLite + ListView)

    1.首先说明一个知识点,通常我们显示布局文件xml都是如下: setContentView(R.layout.activity_main): 其实每一个xml布局文件就好像一个气球,我们可以使用Vie ...

  2. Android(java)学习笔记188:学生信息管理系统案例(SQLite + ListView)

    1.首先说明一个知识点,通常我们显示布局文件xml都是如下: setContentView(R.layout.activity_main): 其实每一个xml布局文件就好像一个气球,我们可以使用Vie ...

  3. Py学生信息管理系统 案例(优化版)

    # 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...

  4. 读《31天学会CRM项目开发》记录2 - 企业信息管理系统

    在信息技术的快速推动下,企业如果依然利用传统的管理方式,以人为主,那效率便会大打折扣.在此背景下,企业信息化系统得 到了高速发展.如我们常见的ERP系统.MES系统,都是提高公司运行效率,降低运营以及 ...

  5. SSM开发健康信息管理系统

    Spring+Spring MVC+MyBatis基于MVC架构的个人健康信息管理系统 采用ssm框架,包含 健康档案.健康预警(用户输入数据,系统根据范围自动判断给出不同颜色箭头显示). 健康分析. ...

  6. 面向对象案例-学生信息管理系统V0.6

    更新版本 面向对象案例 - 学生信息管理系统V1.0 项目要求: 实体类: 学生类: id, 姓名,年龄,性别,成绩 需要使用数组保存学生信息 Student[] allStu 需要完成的方法 1. ...

  7. 关于搬运CSDN上学生信息管理系统的阅读与二次开发

    关于本篇博客内容,我大概分成了三个部分进行讲述:对于源代码的解读.二次重开发后程序的介绍和自己在做完对他人代码的解读和重开发后自己的一些感想. 一.  源代码的解读 在本部分的解读中主要分为三部分:该 ...

  8. Python基础案例练习:制作学生信息管理系统

    一.前言 学生信息管理系统,相信大家或多或少都有做过 最近看很多学生作业都是制作一个学生信息管理系统 于是,今天带大家做一个简单的学生信息管理系统 二.开发环境: 我用到的开发环境 Python 3. ...

  9. java开发学生信息管理系统的实现(简洁易懂),适合计算机专业学生参考,课程设计、毕业论文设计参考等

    编写一个简单的学生管理信息系统. 在oracle中设计一张学生表,以学号作为关键字. 其他学生信息有:姓名.手机号. 在进入系统时,显示如下菜单: ************************** ...

随机推荐

  1. FZU2216【二分】

    题意: 百度. 思路: 一个连续数组111222233344444555666的每一个起伏转折即需要一张万能牌. 然后二分一下得最长区间. #include<cstdio> #includ ...

  2. zoj2901【DP·二进制优化】

    题意: 要排一个L长度的序列,当 j 放在 i 后面的时候会增加v[ i ][ j ]的值,求构成L长度序列的最大值. 思路: 可以想到预处理任意两点<i,j>的最大值是多少,然后题目还有 ...

  3. 计算机视觉(CV)前沿国际国内期刊与会议

    计算机视觉(CV)前沿国际国内期刊与会议1.国际会议 2.国际期刊 3.国内期刊 4.神经网络 5.CV 6.数字图象 7.教育资源,大学 8.常见问题 1. 国际会议现在,国际上计算机视觉方面的三大 ...

  4. poj1273 Drainage Ditches (最大流模板)

    http://poj.org/problem?id=1273 Dinic算法 这是一道最大流的经典题 最大流尽量应该用边表,优于邻接矩阵(所以我写了邻接矩阵版的之后又写了个边表) 用了新学的Dinic ...

  5. 【UVA - 136】Ugly Numbers(set)

    Ugly Numbers Descriptions: Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequ ...

  6. 《Python数据科学手册》第五章机器学习的笔记

    目录 <Python数据科学手册>第五章机器学习的笔记 0. 写在前面 1. 判定系数 2. 朴素贝叶斯 3. 自举重采样方法 4. 白化 5. 机器学习章节总结 <Python数据 ...

  7. Python爬虫之设置selenium webdriver等待

    Python爬虫之设置selenium webdriver等待 ajax技术出现使异步加载方式呈现数据的网站越来越多,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加 ...

  8. Java - 一道关于Arrays.asList的题目

    题目 有这样一道有趣的题目: final int[] test = new int[]{1,2,3,4}; final Integer[] test2 = new Integer[]{1,2,3,4} ...

  9. [Java]LinkedHashMap实现原理

    1.概述 在理解了#7 介绍的HashMap后,我们来学习LinkedHashMap的工作原理及实现.首先还是类似的,我们写一个简单的LinkedHashMap的程序: LinkedHashMap&l ...

  10. shell中括号总结: {}, (), (()), [], [[]]

    括号总结 () 单小括号 命令组,括号中的命令将会开一个新的子shell执行 括号中变量不能被剩下脚本使用 命令之间分号隔开 命令和括号之间可以没有空格 命令替换,等同于``反引号 $(xxx)会被替 ...