微信官网网站模板下载不了/知乎关键词排名优化工具
C++自学精简教程 目录(必读)
该作业是 作业 学生通讯录管理:文本文件增删改查(C++版本) 的C 语言版本。
具体的作业题目描述,要求,可以参考 学生通讯录管理:文本文件增删改查(C++版本)。
为何要有这个作业
这个作业同时提供C++和C两个版本,是我精心设计的。
很多人不清楚到底C和C++ 有何区别。
这两个作业的输入一模一样,输出也一模一样。
本文为了对比C和C++两种语言,特意使用C重新原样实现了一遍。
让学生对面向对象和面向过程的的不同有一个直观的认识。
启动代码
下面是C 语言版本的代码完整实现,比C++ 版本多了10行代码:
#include <stdio.h>
#include <string.h>
#include <assert.h>
#define bool int
#define true 1
#define false 0
#define NAME_LENGTH 30
#define TEL_LENGTH 15typedef struct _Person
{int m_id;char m_name[NAME_LENGTH];char m_tel[TEL_LENGTH];
} Person;
void print_person(Person* person)
{//-表示左对齐,默认右对齐printf("%-5d%-15s%-20s\n", person->m_id, person->m_name, person->m_tel);
}
//返回 bool 表示读取到了文件的末尾
bool read_person(FILE* fp, Person* person)
{bool result = false;if (fscanf(fp, "%d %s %s", &person->m_id, &person->m_name, &person->m_tel) > 0){result = true;}else{result = false;}return result;
}
void write_person(FILE* fp, Person* person)
{// 就像read_person 是从文件里读取内容,使用的是fscanf// 写入文件使用fprintf ,语法类比printf//(1) your code}
typedef struct _PersonManager
{Person m_allPerson[100];int size;
} PersonManager;
void InitPersonMgr(PersonManager* personMgr)
{//(2) your code}
void push_back(PersonManager* personMgr, Person* person)
{personMgr->m_allPerson[personMgr->size++] = *person;
}
void erase_person(PersonManager* personMgr, int index)
{assert(index >= 0 && index < personMgr->size);for (int i = index; i < personMgr->size - 1; i++){//(3) your code}personMgr->size -= 1;
}
void InputOnePerson(PersonManager* personMgr);
bool DeletePerson(PersonManager* personMgr)
{printf("Please input person id for delete:");int id;scanf("%d", &id);for (int i = 0; i < personMgr->size; i++){if (personMgr->m_allPerson[i].m_id == id){//(4) your codereturn true;}}return false;
}
bool QueryPersonByName(PersonManager* personMgr)
{printf("Please input name for query:");char name[NAME_LENGTH];scanf("%s", name);for (int i = 0; i < personMgr->size; i++){if (strcmp( personMgr->m_allPerson[i].m_name, name) == 0){printf("Find:\n");//(5) your code return true;}}printf("not found %s\n", name);return false;
}
bool QueryPersonByTel(PersonManager* personMgr)
{printf("Please input tel for query:");char tel[TEL_LENGTH];scanf("%s", tel);for (int i = 0; i < personMgr->size; i++){if (strcmp(personMgr->m_allPerson[i].m_tel, tel) == 0){printf("Find:\n");print_person(&personMgr->m_allPerson[i]);return true;}}printf("not found %s\n", tel);return false;
}
void ShowAllPerson(PersonManager* personMgr)
{printf("All Person:\n");printf("id name tel\n");for (int i = 0; i < personMgr->size; i++){print_person(&personMgr->m_allPerson[i]);}
}
bool SaveAllPersonToFile(PersonManager* personMgr)
{FILE* fp = fopen("data_saved.txt", "w");//以写方式打开文件if (fp == NULL){printf("can not open file data_saved.txt for write data.\n");return false;}for (int i = 0; i < personMgr->size; i++){//(6) your code}fclose(fp);return true;
}
bool LoadAllPersonFromFile(PersonManager* personMgr, const char* fileName)
{FILE* fp = fopen(fileName, "r");//只读方式打开文本文件if (fp == NULL){printf("load data failed . file %s not exits.\n", fileName);return false;}Person person;while (read_person(fp, &person)){push_back(personMgr, &person);}printf("load data from file success.\n");fclose(fp);return true;
}
void InputOnePerson(PersonManager* personMgr)
{printf("Please input one person:\n");printf("Please input id:");int id;scanf("%d", &id);Person person;memset(&person, 0, sizeof(Person));person.m_id = id;for (int i = 0; i < personMgr->size; i++){if (personMgr->m_allPerson[i].m_id == id){printf("%d already existed! Save failed.\n", id);return;}}printf("Please input name:");scanf("%s", person.m_name);printf("Please input tel:");scanf("%s", person.m_tel);printf("Input finished, save successed.\n");//(7) your code}
int main(int argv, char* argc[])
{PersonManager personMgr;InitPersonMgr(&personMgr);LoadAllPersonFromFile(&personMgr, "input_data.txt");ShowAllPerson(&personMgr);while(true){printf("input a commond : \n");printf("1 [AddPerson]\n");printf("2 [ShowAllPerson]\n");printf("3 [QueryPerson by name]\n");printf("4 [QueryPerson by tel]\n");printf("5 [SaveAllPersonToFile]\n");printf("6 [DeletePerson]\n");printf("0 [ExitAndSaveChange]\n");int commond;scanf("%d", &commond);switch(commond){case 1: { InputOnePerson(&personMgr); break;}case 2: { ShowAllPerson(&personMgr); break;}case 3: { QueryPersonByName(&personMgr); break;}case 4: { QueryPersonByTel(&personMgr); break;}case 5: { SaveAllPersonToFile(&personMgr); break;}case 6: { DeletePerson(&personMgr); break;}case 0: { SaveAllPersonToFile(&personMgr); return 0;}default:{ printf("System Exit.\n"); return 0;}}}return 0;
}
运行结果
和C++ 一模一样:
load data from file success.
All Person:
id name tel
2 zhangsan2 13788889992
3 zhangsan3 13788889993
4 zhangsan4 13788889994
5 wanger 13333333333
input a commond :
1 [AddPerson]
2 [ShowAllPerson]
3 [QueryPerson by name]
4 [QueryPerson by tel]
5 [SaveAllPersonToFile]
6 [DeletePerson]
0 [ExitAndSaveChange]
2
All Person:
id name tel
2 zhangsan2 13788889992
3 zhangsan3 13788889993
4 zhangsan4 13788889994
5 wanger 13333333333
input a commond :
1 [AddPerson]
2 [ShowAllPerson]
3 [QueryPerson by name]
4 [QueryPerson by tel]
5 [SaveAllPersonToFile]
6 [DeletePerson]
0 [ExitAndSaveChange]
1
Please input one person:
Please input id:1
Please input name:zhangsan
Please input tel:13344445555
Input finished, save successed.
input a commond :
1 [AddPerson]
2 [ShowAllPerson]
3 [QueryPerson by name]
4 [QueryPerson by tel]
5 [SaveAllPersonToFile]
6 [DeletePerson]
0 [ExitAndSaveChange]
2
All Person:
id name tel
2 zhangsan2 13788889992
3 zhangsan3 13788889993
4 zhangsan4 13788889994
5 wanger 13333333333
1 zhangsan 13344445555
input a commond :
1 [AddPerson]
2 [ShowAllPerson]
3 [QueryPerson by name]
4 [QueryPerson by tel]
5 [SaveAllPersonToFile]
6 [DeletePerson]
0 [ExitAndSaveChange]
3
Please input name for query:zhangsan
Find:
1 zhangsan 13344445555
input a commond :
1 [AddPerson]
2 [ShowAllPerson]
3 [QueryPerson by name]
4 [QueryPerson by tel]
5 [SaveAllPersonToFile]
6 [DeletePerson]
0 [ExitAndSaveChange]
3
Please input name for query:zhang
not found zhang
input a commond :
1 [AddPerson]
2 [ShowAllPerson]
3 [QueryPerson by name]
4 [QueryPerson by tel]
5 [SaveAllPersonToFile]
6 [DeletePerson]
0 [ExitAndSaveChange]
4
Please input tel for query:13344445555
Find:
1 zhangsan 13344445555
input a commond :
1 [AddPerson]
2 [ShowAllPerson]
3 [QueryPerson by name]
4 [QueryPerson by tel]
5 [SaveAllPersonToFile]
6 [DeletePerson]
0 [ExitAndSaveChange]
4
Please input tel for query:1334444
not found 1334444
input a commond :
1 [AddPerson]
2 [ShowAllPerson]
3 [QueryPerson by name]
4 [QueryPerson by tel]
5 [SaveAllPersonToFile]
6 [DeletePerson]
0 [ExitAndSaveChange]
6
Please input person id for delete:4
input a commond :
1 [AddPerson]
2 [ShowAllPerson]
3 [QueryPerson by name]
4 [QueryPerson by tel]
5 [SaveAllPersonToFile]
6 [DeletePerson]
0 [ExitAndSaveChange]
2
All Person:
id name tel
2 zhangsan2 13788889992
3 zhangsan3 13788889993
5 wanger 13333333333
1 zhangsan 13344445555
input a commond :
1 [AddPerson]
2 [ShowAllPerson]
3 [QueryPerson by name]
4 [QueryPerson by tel]
5 [SaveAllPersonToFile]
6 [DeletePerson]
0 [ExitAndSaveChange]
5
input a commond :
1 [AddPerson]
2 [ShowAllPerson]
3 [QueryPerson by name]
4 [QueryPerson by tel]
5 [SaveAllPersonToFile]
6 [DeletePerson]
0 [ExitAndSaveChange]
0
最终保存数据到文件 data_saved.txt
文件 data_saved.txt 的内容为:
2 zhangsan2 13788889992
3 zhangsan3 13788889993
5 wanger 13333333333
1 zhangsan 13344445555
你的结果也是这样吗?
答案在此
C++自学精简教程 全部答案
学生代码的运行结果
相关文章:

7.2 项目2 学生通讯录管理:文本文件增删改查(C 版本)(自顶向下设计+断点调试) (A)
C自学精简教程 目录(必读) 该作业是 作业 学生通讯录管理:文本文件增删改查(C版本) 的C 语言版本。 具体的作业题目描述,要求,可以参考 学生通讯录管理:文本文件增删改查(C版本)。…...

excel怎么设置任意选一个单元格纵横竖横都有颜色
有时excel表格内容过多的时候,我们通过excel设置任意选一个单元格纵横,竖横背景颜色,这样会更加具有辨识度。设置方式截图如下 设置成功后,预览的效果图...

期货-股票交易规则
交易时间 港股:9:00~9:20 集合竞价,9:3012:00,13:0016:00 持续交易,16:00~16:10 随机收市竞价沪股:9:00~9:25 集合竞价,9:3011:30,13:0015:00 持续交易,11:30~12:00 交易申报深股&a…...

Makefile一些语法
ifneq($(filter true,$(xxx)), )的含义 filter 是过滤的意思,它的原型是:$(filter PATTERN…,TEXT), 意义为:过滤掉字串“TEXT”中所有不符合模式“PATTERN”的单词,保留所有符合此模式的单词做返回值。 结合前面的if…...

0基础可以转行编程行业么
在2022年分行业门类分岗位就业人员年平均工资中,信息传输、软件和信息技术服务业的薪资遥遥领先其他行业,为全国平均薪资水平的 1.78 倍,远超第二名金融行业,其年增长率在9.4%,并成为年收入首个过20 万门槛的行业&…...

【spark】dataframe慎用limit
官方:limit通常和order by一起使用,保证结果是确定的 limit 会有两个步骤: LocalLimit ,发生在每个partitionGlobalLimit,发生shuffle,聚合到一个parttion 当提取的n大时,第二步是比较耗时的…...

基于OpenCV+LPR模型端对端智能车牌识别——深度学习和目标检测算法应用(含Python+Andriod全部工程源码)+CCPD数据集
目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境OpenCV环境Android环境1. 开发软件和开发包2. JDK设置3. NDK设置 模块实现1. 数据预处理2. 模型训练1)训练级联分类器2)训练无分割车牌字符识别模型 3. APP构建1)导入OpenCV库…...

C++学习6
C学习6 基础知识std::thread 实战boost domain socket server 基础知识 std::thread std::thread是C11标准库中的一个类,用于创建并发执行的线程。它的详细用法如下: 头文件 #include <thread>创建线程 std::thread t(func, args...);其中&am…...

bazel使用中存在的问题
只开远端缓存时。kernel采用的bazel编译,遇到如下问题: 1、Action 详情二进制文件解析为文本文件时报错,无法进一步比较分析导致缓存不命中的原因。--- JDK版本的问题 2、远端缓存全部命中时间收益不明显 ---需分析是否为网络原因 3、$HOM…...

svn软连接和文件忽略
软连接 1)TortoiseSVN->Properties->New->Externals->New 2)填入软连接信息 Local path: 写下软连接后的文件夹的名字 URL: 想要软连接的牡蛎->TortoiseSVN->Repo-browser 复制下填入 文件忽略 以空格隔开就行...

自动驾驶攻城战,华为小鹏先亮剑
点击关注 文|刘俊宏 编|苏扬、王一粟 本文为光锥智能x腾讯科技联合出品 2023年过半,城市NOA(城市领航辅助驾驶)的元年如预期中到来了吗? 8月25日,成都车展开幕,与4个月之前的上海…...

企业供应链数字化怎么做?企业数字化供应链流程落地方式
什么是供应链?简单来说,供应链是围绕客户需求,以提高产品流通各个环节的效率为目标,通过资源整合的方式来实现产品从设计、生产到销售、服务整个环节的组织形态。如同人工智能、区块链、5G等技术的发展带来的各种行业变化…...

java八股文面试[多线程]——synchronized 和lock的区别
其他差别: synchronized是隐式的加锁,lock是显式的加锁; synchronized底层采用的是objectMonitor,lock采用的AQS; synchronized在进行加锁解锁时,只有一个同步队列和一个等待队列, lock有一个同步队列,可以有多个等待队列; synchronized使用了object类的wait和noti…...

实现一个简单的控制台版用户登陆程序, 程序启动提示用户输入用户名密码. 如果用户名密码出错, 使用自定义异常的方式来处理
//密码错误异常类 public class PasswordError extends Exception {public PasswordError(String message){super(message);} }//用户名错误异常类 public class UserError extends Exception{public UserError(String message){super(message);} }import java.util.Scanner;pu…...

Java 大厂八股文面试专题-设计模式 工厂方法模式、策略模式、责任链模式
面试专题-设计模式 前言 在平时的开发中,涉及到设计模式的有两块内容,第一个是我们平时使用的框架(比如spring、mybatis等),第二个是我们自己开发业务使用的设计模式。 面试官一般比较关心的是你在开发过程中ÿ…...

Anaconda Prompt输入jupyter lab无反应
问题:Anaconda Prompt界面输入指令无反应 原因:公司电脑勒索病毒防御工具阻止了进程 解决:找到黑名单恢复进程...

JavaScript Web APIs - 05 Window对象 、本地存储
Web APIs - 05 文章目录 Web APIs - 05js组成window对象定时器-延迟函数location对象navigator对象histroy对象本地存储(今日重点)localStorage(重点)sessionStorage(了解)localStorage 存储复杂数据类型 综…...

Ansible学习笔记6
stat模块:获取文件的状态信息,类似Linux的stat状态。 获取/etc/fstab文件的状态。 [rootlocalhost tmp]# ansible group1 -m stat -a "path/etc/fstab" 192.168.17.106 | SUCCESS > {"ansible_facts": {"discovered_inter…...

Linux挖矿程序清除
1. 找到挖矿进程 2.找到病毒的文件地址 ls -l /proc/进程ID/exe3.删除文件命令 rm -rf 文件地址4.杀死挖矿进程 kill -9 进程ID...

使用Git和Github上传代码文件
1. 先检查是否安装好git git --version2. 输入你的github用户名 git config --global user.name "用户名"3. 输入你的github邮件 git config --global user.email "邮件地址"4. 设定git推送本地仓库中与远程仓库中具有相同名称的所有分支。 git config…...

OpenAI发布ChatGPT企业级版本
本周一(2023年8月28日)OpenAI 推出了 ChatGPT Enterprise,这是它在 4 月份推出的以业务为中心的订阅服务。该公司表示,根据新计划,不会使用任何业务数据或对话来训练其人工智能模型。 “我们的模型不会从你的使用情况中…...

vue3中axios的使用方法
在Vue 3中使用axios发送HTTP请求的方法与Vue 2中基本相同。首先,需要安装axios库: npm install axios然后,在Vue组件中引入axios: import axios from axios;接下来,可以在Vue组件的方法中使用axios发送HTTP请求。例如…...

【docker】容器的运行、停止、查看等基本操作
容器与镜像的区别 image镜像 Docker image是一个read-only文件,位于磁盘上这个文件包含文件系统,源码,库文件,依赖,工具等一些运行application所需要的文件可以理解成一个模板docker image具有分层的概念 container…...

Python|OpenCV-鼠标自动绘制图像(4)
前言 本文是该专栏的第4篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 在本专栏之前,有详细介绍使用OpenCV绘制图形以及添加文字的方法,感兴趣的同学可往前翻阅查看“Python|OpenCV-绘制图形和添加文字的方法(2)”。 而本文重点来介绍使用OpenCV来操作鼠标,以…...

IDEA 设置提示信息
IDEA 设置提示信息 File->Settings->Editor->Code Completion 取消勾选 Math case...

清理docker镜像方法
首先stop ps -a里的容器,然后rm容器,最后再rmi镜像 先停止容器 rm容器 docker rmi 镜像 删除后可以发现已经不存在...

windows 搭建 swoole开发环境(官网已支持)
第一步下载:swoole官网下载 swoole-cli-v5.0.3-cygwin-x64.zip 只支持 64 位的系统 第二步解压到指定文件夹:E:\phpstudy_pro\WWW\swoole-cli-v5.0.3-cygwin-x64 第三步设置环境变量:把解压后的文件夹下的 bin 目录路径配置到系统的 Path 环境…...

matlab的基本使用
matlab的基本使用,可以参考如下的教程:matlab教程 本文针对基本内容进行记录。 matlab简介 MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人&…...

hznuoj---python查找最大字母
Description 对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串"(max)"。 Input 输入数据包括多个测试实例,每个实例由一行长度不超过100的字符串组成,字符串仅由大小写字母构成。注:A与a是…...

Leetcode---360周赛
题目列表 2833. 距离原点最远的点 2834. 找出美丽数组的最小和 2835. 使子序列的和等于目标的最少操作次数 2836. 在传球游戏中最大化函数值 一、距离原点最远的点 这题主要是理解题意,遇到L往左走,遇到R往右走,遇到_左右都可以走&#x…...