控制系统编程实例(三分钟学编程③)
控制台信息管理程序
Foreword
经过了前几篇文章的图形化学习,不知道各位小伙伴是否有所收获?见识了C 五彩斑斓的世界,接下来,咋们可又得回到控制台窗口了;这次本文将带来一个学生信息的管理程序,但是,考验各位小伙伴的时候到了,不知道各位小伙伴是否有能力将本文的信息管理程序也图形化?
评论留言:图形化,说不定下一篇文章就有你想要的答案!
运行截图展示
项目浅析
有头链表就是通过一个头部指针来操作整个的数据,然后又通过指针互相连接,串在一起;大家可以联想老鹰捉小鸡时,母鸡和小鸡排在一起用手拉着对方的情形;
有头链表可参考下图1.1;
结构体嵌套可参考下图1.2;
✦
1
参考图(1.1)
2
参考图(1.2)
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