您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 工作范文 > 第七章 处理复杂数据
第七章处理复杂数据主要内容•案例:处理“学生信息管理系统”的完整信息•使用结构类型表示学生完整信息•案例实施•调试程序•学生练习•拓展•小结•在本章,将继续完善“学生信息管理系统”案例程序,在上一章案例程序的基础上,可以实现对学生完整信息的管理。具体包括:•(1)录入学生的完整信息,包括:姓名、学号、身份证号码、年龄、出生日期、家庭地址;•(2)按姓名查询学生信息,并可列出查询得到的学生的完整信息;•(3)修改学生信息,包括:姓名、学号、身份证号码、年龄、出生日期、家庭地址;•(4)删除指定的学生信息;•(5)列表显示所有学生的完整信息。处理“学生信息管理系统”完整信息•为了表示复合数据,必须先定义一个复合结构类型,C语言提供了一个关键字struct来定义一个复合结构类型。•复合结构类型是对C语言基本数据类型的扩充。在定义了复合结构类型以后,可以为定义的复合结构类型定义变量。•为了表示一个“学生”,可以定义一个结构类型:•structStudent•{charname[40];//学生姓名charsno[20];//学号charsid[20];//身份证号码intage;//年龄charaddress[200];//家庭地址•};使用结构表示学生信息-定义结构•结构类型定义的一般格式为:•struct结构类型名•{•成员类型成员名称;•成员类型成员名称;•……;•};•注意,不要遗漏结构类型定义的“}”后面的“;”。其中的“成员类型”可以是C语言基本数据类型,也可以是已经定义的其他结构类型。这也说明,结构类型的定义是可以嵌套的。使用结构表示学生信息-定义结构•为了更好的表示学生的基本信息,可用出生日期来替代“年龄”。•structDate•{•intyear;//年•intmonth;//月•intday;//日•};•structStudent•{charname[40];//学生姓名charsno[20];//学号charsid[20];//身份证号码structDatebirth;//出生日期charaddress[200];//家庭地址•};使用结构表示学生信息-定义结构•一旦定义了新的结构类型,可以定义该结构类型的变量。例如,为了表示一个学生信息,基于已经定义的结构类型•Student,可以定义一个变量:•structStudentstu;•变量stu称为结构变量。定义结构变量的一般形式如下:•struct结构类型名变量1,变量2,……;表示学生信息-定义结构类型变量•可以使用typedef关键字重新定义Student结构类型如下:•typedefstruct•{•intyear;//年•intmonth;//月•intday;//日•}Date;•typedefstruct•{•charname[40];//学生姓名•charsno[20];//学号•charsid[20];//身份证号码•Datebirth;//出生日期•charaddress[200];//家庭地址•}Student;•定义后就可以直接用Date和Student表示结构类型了。表示学生信息-定义结构类型变量•可以在定义结构类型的同时定义结构变量:•typedefstruct•{•intyear;//年•intmonth;//月•intday;//日•}Date;•structStudent•{•charname[40];//学生姓名•charsno[20];//学号•charsid[20];//身份证号码•Datebirth;//出生日期•charaddress[200];//家庭地址•}stu;•(1)可以使用也可以不使用typedef定义结构类型,它们可同时存在;•(2)在定义结构类型的同时定义结构变量,则不能使用typedef关键字表示学生信息-定义结构类型变量•对结构变量的访问,就是分解为对结构变量各个成员的访问。访问结构变量成员的一般形式是:•结构变量名.成员名•strcpy(stu.name,张三);•strcpy(stu.sno,2010060501);•strcpy(stu.sid,410203199010123045);•stu.birth.year=1990;•stu.birth.month=10;•stu.birth.day=12;•strcpy(stu.address,广东省广州市天河区天河北路123号);•printf(学生基本信息:姓名=%s,学号=%s,身份证=%s,出生日期=%d-%d-%d,家庭地址=%s\n,stu.name,stu.sno,stu.sid,stu.birth.year,stu.birth.month,stu.birth.day,stu.address);表示学生信息-访问结构变量成员•在定义结构变量的同时,也可以对结果变量进行初始化。•Studentstu={张三,2010060501,4102031990101245,{1990,10,12},广东省广州市天河区天河北路123号};•在定义结构变量的同时对结构变量进行初始化,只需在结构变量的后面加上赋值运算符,并把成员对应的值按定义结构类型时的顺序列出来,中间用逗号分隔开,并用一对“{}”括起来,放在赋值运算符的后面即可•包含在“{}”中的值必须与结构变量成员的个数和类型相同。表示学生信息-访问结构变量成员•intdisplayStudent(Studentstu)•{•printf(-----------------------------------------------------------\n);•printf(学生基本信息:姓名=%s,学号=%s,身份证=%s,出生日期=%d-%d-%d,家庭地址=%s\n,stu.name,stu.sno,tu.sid,tu.birth.year,stu.birth.month,stu.birth.day,stu.address);•printf(------------------------------------------------------------);•return0;•}•Studentstu={张三,2010060501,410203199010123045,{1990,10,12},广东省广州市天河区天河北路123号};•displayStudent(stu);表示学生信息-结构类型作为参数•C源文件包括两种类型:扩展名为.c的源文件和扩展名为.h头文件,它们都称为工程源文件。•其中,扩展名为.c的源文件中主要放置一些C语句代码,包括预处理指令、函数定义等;•扩展名为.h的头文件,也称为include文件,主要放置一些结构类型定义、函数说明、常量定义等。在C中,包括很多扩展名为.h的头文件。案例实施-程序重构•添加Student.h头文件•typedefstruct{•intyear;//年•intmonth;//月•intday;//日•}Date;•typedefstruct{•charname[40];//学生姓名•charsno[20];//学号•charsid[20];//身份证号码•Datebirth;//出生日期•charaddress[200];//家庭地址•}Student;案例实施-程序重构•添加function.h头文件•//函数说明•intinsert();/*该函数添加新的学生信息*/•intquery();•intupdate();•intdelete();•intlist();•intsave();•intload();案例实施-程序重构•将各个功能函数放置到function.c文件中•需要在function.c源文件开头的预处理指令部分加上如下的#include预处理指令:•#includestdio.h•#includeStudent.h“•为StudentManager.c添加必要的头文件•#includeStudent.h•#includefunction.h“•具体各文件代码请参考教材。案例实施-程序重构•intinsert(){•if(current=50){•printf(对不起,由于人数已满,不能再添加新学生信息\n);•return1;•}•printf(请输入学生姓名:);•scanf(%s,stu[current].name);•printf(请输入学生学号:);•scanf(%s,stu[current].sno);•printf(请输入学生身份证号码:);•scanf(%s,stu[current].sid);•printf(请输入学生出生日期:);•scanf(格式(年-月-日):%d-%d-%d,&stu[current].birth.year,•&stu[current].birth.month,&stu[current].birth.day);•printf(请输入学生家庭地址:);•scanf(%s,stu[current].address);•current++;•return0;•}案例实施-修改函数完善程序功能•intquery(){•charname[40];•inti;•printf(请输入要查询的学生的姓名:);•scanf(%s,name);•for(i=0;icurrent;i++){•if(strcmp(stu[i].name,name)==0){•printf(学生信息如下\n);•printf(姓名:%s\n,stu[i].name);•printf(学号:%s\n,stu[i].sno);•printf(身份证号:%s\n,stu[i].sid);•printf(出生日期:%d-%d-%d\n,stu[i].birth.year,•stu[i].birth.month,stu[i].birth.day);•printf(地址:%s\n,stu[i].address);•return0;•}•}•printf(该学生不存在!\n\n);•return1;•}案例实施-修改函数完善程序功能•intupdate(){•charname[40];•inti;•printf(请输入要修改的学生的姓名:);•scanf(%s,name);•for(i=0;icurrent;i++){•if(strcmp(stu[i].name,name)==0){•printf(请输入学生姓名:);•scanf(%s,stu[i].name);•printf(请输入学生学号:);•scanf(%s,stu[i].sno);•printf(请输入学生身份证号码:);•scanf(%s,stu[i].sid);•printf(请输入学生出生日期,格式(年-月-日):);•scanf(%d-%d-%d,&stu[i].birth.year,•&stu[i].birth.month,&stu[i].birth.day);•printf(请输入学生家庭地址:);•scanf(%s,stu[current].address);•return0;•}•}•printf(该学生不存在\n);•return1;•}案例实施-修改函数完善程序功能•intdelete()•{•charname[40];•inti;•printf(请输入要删除的学生的姓名:);•scanf(%s,name);•for(i=0;icurrent;i++)•{•if(strcmp(stu[i].name,name)==0)•{•if(i(current-1))•memmove(&stu[i],&stu[i+1],(current-1-i)*sizeof(Student));•current--;•return0;•}•}•printf(该学生不存在\n);•return1;•}案例实施-修改函数完善程序功能•设置程序为可调试状态•设置程序的断点•启动程序调试•单步跟踪你的程序•结束调试调试程序•已经完成对完整学生信息的
本文标题:第七章 处理复杂数据
链接地址:https://www.777doc.com/doc-3140536 .html