控制系统编程实例(三分钟学编程③)

控制台信息管理程序

Foreword

经过了前几篇文章的图形化学习,不知道各位小伙伴是否有所收获?见识了C 五彩斑斓的世界,接下来,咋们可又得回到控制台窗口了;这次本文将带来一个学生信息的管理程序,但是,考验各位小伙伴的时候到了,不知道各位小伙伴是否有能力将本文的信息管理程序也图形化?

评论留言:图形化,说不定下一篇文章就有你想要的答案!

运行截图展示

控制系统编程实例(三分钟学编程③)(1)

项目浅析

有头链表就是通过一个头部指针来操作整个的数据,然后又通过指针互相连接,串在一起;大家可以联想老鹰捉小鸡时,母鸡和小鸡排在一起用手拉着对方的情形;

有头链表可参考下图1.1;

结构体嵌套可参考下图1.2;

1

参考图(1.1)

控制系统编程实例(三分钟学编程③)(2)

2

参考图(1.2)

控制系统编程实例(三分钟学编程③)(3)

3

结构体初始化

p_Node initNode() { p_Node pN = (p_Node)malloc(sizeof(Node)); if (!pN)exit(OVERFLOW); //exit(OVERFLOW)是强行退出程序 //这里就是如果指针内存分配失败,强行退出程序 pN->age = 0; pN->number = 0; //指针通过动态内存申请可变为变量,SIZE是我定义的宏 pN->name = (char*)malloc(sizeof(char) * SIZE); if (!pN->name)exit(OVERFLOW); return pN; }

4

将节点变为数据

p_Data createData(p_Node Node) { p_Data p_NewData = (p_Data)malloc(sizeof(Data)); if (!p_NewData)exit(OVERFLOW); p_NewData->next = NULL; p_NewData->node = initNode(); //字符串不能直接赋值,要进行拷贝 Int strLeng = strlen(Node->name) 1; //strlen计算的长度中没有算'/0',终止符,所以要加1; strcpy_s(p_NewData->node->name, strLeng, Node->name); p_NewData->node->age = Node->age; p_NewData->node->number = Node->number; return p_NewData; }

5

写入文件一般步骤

  • 创建写文件流对象 ->打开文件 -> 判断文件是否打开 -> 写入文件 -> 关闭文件;(具体如下示例代码)
  • 这里 ios::app 是以追加的方式写文件,否则会覆盖原有文件;
  • 由于读写文件步骤一致,便不再叙述读文件的步骤。

1.3

保存数据示例代码

int saveFile(p_Data p_Head) { ofstream ofs; ofs.open(FILENAME, ios::binary | ios::out | ios::app); if (!ofs.is_open()) { cout << "保存文件时,打开文件失败..." << endl; return Error; } p_Data pMove = p_Head->next; if (pMove == NULL) { cout << "未保存,链表没有数据..." << endl; ofs.close(); return Error; } while (pMove != NULL) { ofs << pMove->node->name<<" "<< pMove->node->age<<" " << pMove->node->number << endl; pMove = pMove->next; } ofs.close(); cout << "保存成功..." << endl; return Ok; }

1.4

读取数据示例代码

int readFile(p_Data p_Head) { p_Data curData = p_Head->next; if (curData != NULL) { free(curData); curData = NULL; } p_Head->next = NULL; //至于上面这里这样写的作用,大家可以注释后感受一下 //注释快捷键(vs2019中):ctrl k c ifstream ifs; ifs.open(FILENAME, ios::binary | ios::in); if (!ifs.is_open()) { cout << "读文件时打开失败..." << endl; return Error; } p_Node Node = initNode(); //int num = 0;调试作用 while (ifs >> Node->name >> Node->age >> Node->number) { insertHead(p_Head, Node); //num ;调试作用 } //这里是我调试的时候写的 /*cout << "循环了" << num << "次" << endl; cout << "文件读取完毕..." << endl;*/ ifs.close(); cout << "成功读入文件..." << endl; return Ok; }

6

判断用户的输入类型

  • 因为用户选择功能的方式是输入Int类型的数字,如果不对用户的输入做判断,当用户char类型或其他类型数据时,系统会崩掉或者陷入无线循环,所以最好判断一下输入;
  • cin.fail()判断输入的类型和定义的类型是否一致,一致返回true,否则返回false;

1.5

保存数据示例代码

int select; cin >> select; if (!cin.fail()){}

关于该项目的大致解析就到这儿结束了,各位小伙伴赶紧自己试一试吧!如果各位小伙伴有不清楚的地方,欢迎评论区留言讨论;如果想获取项目完整代码,评论区留言:我想要代码,即可获取完整的项目源代码!咋们下一期再见......

下一期我们再见


策划:贵州大学科技学院工学部团总支 · 学生会

责编:任兴武

初审:陈珊 任兴武

编审:兰令

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页