目录

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

  

需求分析

总体需求

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

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

其他需求

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

 

问题分析

全局变量

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

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

 

功能模块划分

 

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

 

功能模块分析

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

开发阶段

阶段划分

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

 

第一阶段

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

实现效果

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

 

难点分析

1.变量和函数的定义

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

2.初始化函数init()

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

 

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

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

 

 

第二阶段

实现输入学员信息

实现效果

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

 

变量和函数的定义

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

 

 

每项信息的存储

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

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

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

 

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

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

 

 

第三阶段

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

实现效果

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

 

删除成功提示删除成功。

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

 

变量和函数的定义

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

 

getStuRowByNo()函数的实现

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

 

deleteByNo()函数的实现

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

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

 

第四阶段

格式化显示学员信息

实现效果

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

 

 

变量和函数的定义

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

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

 

analyse()函数的实现

功能:解析学员信息

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

实现:

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

 

修改listStu()函数

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

 

 

第五阶段

根据学号查找学生信息

实现效果

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

 

变量和函数的定义

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

 

queryByNo()函数的实现

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

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

 

第六阶段

修改学员信息

实现效果

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

 

变量和函数的定义

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

 

modifyInfoByNo()函数的实现

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

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

 

 

 综合案例参考代码

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

#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");
}

  

相关文章: