C07 模块化开发信息管理系统案例

目录

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

  

需求分析

总体需求

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

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

其他需求

  • 学员信息需求
  • 学号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");
}

  

posted @ 2018-12-24 23:48  rask  阅读(679)  评论(0编辑  收藏  举报