博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[学习记录]接口的封装和设计练习一
阅读量:5168 次
发布时间:2019-06-13

本文共 5806 字,大约阅读时间需要 19 分钟。

/*        题目:        //声明一个结构体类型        struct _AdvTeacher        {            char    *name;            char    *tile;            int        age;            char    *addr;            char    *p1; //系统预留成员域            char    **p2;//系统预留成员域        };        要求定义一个结构体数组(6个元素),要求从键盘输入数据,并按照名称大小进行排序;打印输出。            1、    打印结构体数组,需要单独封装成函数;10            2、    排序结构体数组,需要单独封装成函数(按照名称进行排序);50            3、    main函数中编写业务测试模型;40            2014-04-22 19:59:31            wirting by zhangshichuan.*/#include 
using namespace std;#define StructArrarySize 3 // 老师数量 #define StudentNum 1 // 每位老师的学生的数量 typedef struct _AdvTeacher{ char *name; char *tile; int age; char *addr; char **student;}AdvTeacher; int CreateStructArray(AdvTeacher **, int, int); //客户端初始化结构体数组int FreeStructArray(AdvTeacher **, int, int); //客户端释放结构体数组内存int PrintStructArray(AdvTeacher*, int, int); //客户端打印结构体数组元素int SortStructArray(AdvTeacher*, int); //客户端对结构体数组元素排序int main(void){ int rv = 0; AdvTeacher * t = NULL; rv = CreateStructArray(&t, StructArrarySize, StudentNum); //被调函数分配内存,甩出来 if (rv != 0) { printf("func: CreateStructArray() _%d_error_\n ", rv); goto End; } for (int i = 0; i < StructArrarySize; ++i) // 客户端初始化赋值 { printf("请输入第%d位老师的姓名: ", i+1); scanf("%s", t[i].name); printf("请输入第%d位老师的年龄: ", i+1); scanf("%d", &(t[i].age)); printf("请输入第%d位老师的职务: ", i+1); scanf("%s", t[i].tile); printf("请输入第%d位老师的地址: ", i+1); scanf("%s", t[i].addr); for (int j = 0; j < StudentNum; ++j) { printf("请输入第%d位老师的第%d位学生的姓名: ", i+1, j+1); scanf("%s", t[i].student[j]); } } printf("排序前:\n"); rv = PrintStructArray(t, StructArrarySize, StudentNum); // 打印 if (rv != 0) { printf("func: PrintStructArray() _%d_error_\n ", rv); goto End; } rv = SortStructArray(t, StructArrarySize); // 排序 if (rv != 0) { printf("func: SortStructArray() _%d_error_\n ", rv); goto End; } printf("排序后:\n"); rv = PrintStructArray(t, StructArrarySize, StudentNum); // 打印 if (rv != 0) { printf("func: PrintStructArray() _%d_error_\n ", rv); goto End; }End: rv = FreeStructArray(&t, StructArrarySize, StudentNum); if (rv != 0) { printf("致命错误: FreeStructArray()执行失败!\n _%d_error_\n", rv); } system("pause"); return rv;}// 创建结构体数组int CreateStructArray(AdvTeacher **t, int structArrarySize, int studentNum){ int rv = 0; if (NULL == t) { rv = -1; return rv; } AdvTeacher * temp = NULL; temp = (AdvTeacher *)malloc(structArrarySize * sizeof(AdvTeacher)); if (NULL == temp) { rv = -2; return rv; } for (int i = 0; i < structArrarySize; ++i) { temp[i].name = (char *)malloc(256 * sizeof(char)); temp[i].addr = (char *)malloc(256 * sizeof(char)); temp[i].tile = (char *)malloc(256 * sizeof(char)); if (NULL == temp[i].name || NULL ==temp[i].addr || NULL == temp[i].tile) { rv = -3; return rv; } temp[i].student = (char **)malloc(studentNum * sizeof(char *)); if (NULL == temp[i].student) { rv = -4; return rv; } for (int j = 0; j < studentNum; ++j) //创建学生内存块 { (temp[i].student)[j] = (char *)malloc(256 * sizeof(char)); if (NULL == (temp->student)[j]) { rv = -5; return rv; } } } *t = temp; return rv;}// 销毁结构体数组int FreeStructArray(AdvTeacher **t, int structArrarySize, int studentNum){ int rv = 0; AdvTeacher *temp = *t; for (int i = 0; i < structArrarySize; ++i) { for (int j = 0; j < studentNum; ++j) // 销毁学生内存块 { if (NULL != temp[i].student[j]) { free(temp[i].student[j]); } } if (NULL != temp[i].addr && NULL != temp[i].name && NULL != temp[i].tile && NULL != temp[i].student) { free(temp[i].addr); free(temp[i].name); free(temp[i].tile); free(temp[i].student); } } if (NULL != temp) { free(temp); *t = NULL; //间接赋值 通过*(实参的地址), 去间接修改实参的值 为null } return rv;}// 打印结构体数组int PrintStructArray(AdvTeacher*t, int structArrarySize, int studentNum){ int rv = 0; if (NULL == t) { rv = -1; return rv; } AdvTeacher *temp = t; for (int i = 0; i < structArrarySize; ++i) { printf("第%d位老师的姓名为:%s \n", i + 1, temp[i].name); printf("第%d位老师的年龄为:%d \n", i + 1, (temp[i].age)); printf("第%d位老师的职务为:%s \n", i + 1, temp[i].tile); printf("第%d位老师的地址为:%s \n", i + 1, temp[i].addr); for (int j = 0; j < studentNum; ++j) { printf("第%d位老师的第%d位学生的姓名为:%s\n", i + 1, j + 1, temp[i].student[j]); } } return rv;}// 排序结构体数组int SortStructArray(AdvTeacher*t, int structArrarySize){ int rv = 0; if (NULL == t) { rv = -1; return rv; } AdvTeacher *temp = t; for (int i = 0; i < structArrarySize; ++i) { for (int j = i + 1; j < structArrarySize; ++j) { if (0 > strcmp(temp[i].name, temp[j].name)) { AdvTeacher tmp = temp[i]; temp[i] = temp[j]; temp[j] = tmp; } } } return rv;}

 

翻译结果
 

转载于:https://www.cnblogs.com/shichuan/p/4428337.html

你可能感兴趣的文章
yii2 ActiveRecord多表关联以及多表关联搜索的实现
查看>>
搜狗输入法安装--ubuntu
查看>>
ps/2接口键盘的输入及显示
查看>>
Swift———a Glance(极客学院)笔记
查看>>
【poj3294-不小于k个字符串中最长公共子串】后缀数组
查看>>
java如何获取其它用户登录的真是IP地址
查看>>
Jquery通过指定层次关系获取元素
查看>>
c# for 和 foreach 的区别
查看>>
docfx (一)
查看>>
HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别
查看>>
深度学习之前馈神经网络(前向传播和误差反向传播)
查看>>
IEnumerable<T>和IQueryable<T>区别
查看>>
(转)MFC界面风格
查看>>
Centos7 tmux1.6 安装
查看>>
二叉树(三)
查看>>
linux加密文件系统 fsck 无法修复一例
查看>>
【linux配置】VMware安装Redhat6.5
查看>>
AI自主决策——有限状态机
查看>>
Python装饰器学习笔记
查看>>
iframe父子窗口取值
查看>>