我想在我原来的程序上加多一个功能
#include<stdio.h>
#include<string.h>
struct friends_list{
char name[10];
int age;
char telephone[13];
};
int Count=0;
void new_friend(struct friends_list friends[]);
void search_friend(struct friends_list friends[],char*name);
void Modify_friend(struct friends_list friends[],char*name);
void Delete_friend(struct friends_list friends[],char*name,int n);
int main(void)
{
int choice,n;
char name[10];
struct friends_list friends[50];
do{
printf("手机通讯录功能选项: 1:新建 2:查询 3:修改 4:删除 0:退出\n");
printf("请选择功能:");
scanf("%d",&choice);
switch(choice){
case 1:
new_friend(friends);
break;
case 2:
printf("请输入要查找的联系人姓名:");
scanf("%s",name);
search_friend(friends,name);
break;
case 3:
printf("请输入您要修改的联系人的姓名:");
scanf("%s",name);
printf("\n");
Modify_friend(friends,name);
break;
case 4:
printf("1:单个删除 2:全部删除\n\n");
printf("请选择您需要的操作:\n");
scanf("%d",&n);
if(n==1){
printf("输入名字\n");
scanf("%s",name);
Delete_friend(friends,name,n);
break;
}
if(n==2){
Delete_friend(friends,name,n);
break;
}
case 0: break;
}
}while(choice!=0);
printf("谢谢使用通讯录功能!\n");
return 0;
}
void new_friend(struct friends_list friends[ ])
{
struct friends_list f;
if(Count==50){
printf("通讯录已满!\n");
return;
}
printf("请输入新的联系人的姓名:");
scanf("%s",f.name);
printf("请输入新联系人的年龄:");
scanf("%d",&f.age);
printf("请输入新联系人的联系电话:");
scanf("%s",f.telephone);
friends[Count] = f;
Count++;
}
/*查询联系人*/
void search_friend(struct friends_list friends[],char*name)
{
int i,flag=0;
if(Count==0){
printf("通讯录是空的!\n");
return;
}
/*在书本源代码的基础上,我修改了一下,让程序可以查询多个相同名字的联系人*/
for(i=0;i<Count;i++)
if(strcmp(name,friends[i].name)==0){
printf("姓名:%s\t",friends[i].name);
printf("年龄:%d\t",friends[i].age);
printf("电话:%s\n",friends[i].telephone);
flag++;
}
if(flag==0)
printf("无此联系人!\n");
}
/*修改联系人*/
void Modify_friend(struct friends_list friends[],char*name)
{
int k,y=0;
int t,j=1,g=0;
struct friends_list x;
if(Count==0){
printf("通讯录是空的!\n");
return;
}
/*首先,判断要修改的联系人中有没有相同的名字*/
for(k=0;k<Count;k++){
if(strcmp(name,friends[k].name)==0)
y++;
}
/*如果,y等于1,说明只有一个需要修改的联系人*/
if(y==1){
for(k=0;k<Count;k++){
if(strcmp(name,friends[k].name)==0){
printf("请重新输入姓名\n");
scanf("%s",x.name);
printf("请重新输入年龄\n");
scanf("%d",&x.age);
printf("请重新输入电话号码\n");
scanf("%s",x.telephone);
friends[k]=x;
}
}
}
/*如果,y大于1,说明你选择修改的人中,有多个相同名字的联系人*/
if(y>1){
/*用序号来显示所有需要修改的联系人*/
printf("此通讯录有%d个名字相同的联系人.\n",y);
for(k=0;k<Count;k++){
if(strcmp(name,friends[k].name)==0){
printf("%d:姓名:%-10s",j,friends[k].name);
printf("年龄:%-5d",friends[k].age);
printf("电话:%13s\n",friends[k].telephone);
j++;
}
}
/*选择需要修改的联系人的序号*/
printf("请选择所要修改的联系人序号:\n");
scanf("%d",&t);
for(k=0;k<Count;k++){
if(strcmp(name,friends[k].name)==0){
g++;
if(g==t){/*如果g等于t,说明在序号中找到了需要修改的人*/
printf("请重新输入姓名\n");
scanf("%s",x.name);
printf("请重新输入年龄\n");
scanf("%d",&x.age);
printf("请重新输入电话号码\n");
scanf("%s",x.telephone);
friends[k]=x;
}
}
}
}
if(y==0)
printf("无此联系人\n");
}
void Delete_friend(struct friends_list friends[],char*name,int n)
{
int l,h=0,y=0,i,k;
int j=1;
int a[50],t,g=0;
if(Count==0){
printf("通讯录是空的!\n");
return;
}
/*如果,n等于1,说明用户选择单个删除*/
if(n==1){
/*首先,判断在修改的人当中有没有相同名字的*/
for(i=0;i<Count;i++){
if(strcmp(name,friends[i].name)==0)
y++;
}
/*如果,y等于1,说明你需要修改的人当中只有一个*/
if(y==1){
for(l=0;l<Count;l++){
if(strcmp(name,friends[l].name)==0){
do{
friends[l]=friends[l+1];
l++;
}while(l<Count);
h++;
Count--;
printf("删除成功!\n");
}
}
}
/*如果,y>1 说明你要修改的人当中有多个相同的名字*/
if(y>1){
/*用序号来显示所有需要修改的联系人*/
printf("有%d个相同的联系人:\n",y);
for(l=0;l<Count;l++){
if(strcmp(name,friends[l].name)==0){
a[l]=l;
printf("%d:姓名:%-10s",j,friends[l].name);
printf("年龄:%-5d",friends[l].age);
printf("电话:%13s\n",friends[l].telephone);
j++;
h++;
}
}
/*选择需要修改的联系人序号*/
printf("请选择所要删除的联系人序号:\n");
scanf("%d",&t);
for(k=0;k<Count;k++)
if(strcmp(name,friends[k].name)==0){
g++;
if(g==t){/*如果 g等于选择的序号t,就开始删除*/
do{
friends[k]=friends[k+1];
k++;
}while(k<Count);}
if(g==t){/*这里又使用一个g等于t,表面上看是多余的.其实当在选择的序号
超出现有的序号时,起到限制作用*/
printf("删除成功!\n");
Count--;
}
}
}
if(h==0)
printf("没有此联系人\n");
}
/*如果n等于2,说明用户选择了全部删除*/
if(n==2){
Count=0;/*把Count赋0,也就是清空所有联系人*/
printf("已全部删除!\n");
}
}
相关推荐
基于线性车辆三自由度动力学+无迹卡尔曼滤波UKF估计模型(横摆角速度+质心侧偏角+车速)联合仿真
内容概要:通过构建基于线性车辆三自由度动力学模型与无迹卡尔曼滤波(UKF)的联合仿真系统,实现对车辆关键状态参数的高精度估计,重点包括横摆角速度、质心侧偏角和车速。该方法利用车辆动力学模型描述其横向、纵向及横摆运动行为,结合UKF这一适用于非线性系统的先进状态估计算法,有效处理传感器噪声和模型不确定性,从而在缺乏直接测量手段的情况下,实现对难以获取状态量的可靠估计。整个仿真框架通常在MATLAB/Simulink环境中搭建,能够模拟真实驾驶工况,验证算法的有效性和鲁棒性,为车辆稳定性控制、自动驾驶感知与决策等高级功能提供重要的状态信息支撑。; 适合人群:具备车辆动力学、现代控制理论和MATLAB/Simulink仿真基础,从事汽车工程、自动驾驶或状态估计相关研究的研发人员与研究生。; 使用场景及目标:① 深入理解并掌握非线性系统状态估计的核心方法,特别是UKF的原理与实现;② 学习如何将理论化的车辆动力学模型转化为可用于仿真的模块;③ 实践并验证车辆关键状态(如质心侧偏角)的间接估计技术,服务于车辆动态控制系统的设计与测试。; 阅读建议:此资源以开发仿真模型为核心,不仅关注代码和模型的实现,更强调对车辆动力学机理和滤波算法设计思路的理解。学习者应结合理论知识,动手搭建并调试仿真模型,通过改变工况和参数来观察估计效果,从而深刻领会系统辨识与状态估计在实际工程中的应用价值。
基于PID控制的ABS汽车防抱死制动系统、车轮滑移率+最优滑移率Carsim和Simulink联合仿真(带参考文献)
内容概要:本文档主要围绕基于PID控制的汽车防抱死制动系统(ABS)开展研究,重点聚焦于车轮滑移率与最优滑移率的精确控制。通过Carsim与Simulink联合仿真平台,构建整车动力学模型与ABS控制器,利用PID算法实时调节制动压力,使实际滑移率逼近理论最优值,从而最大化轮胎与路面间的纵向附着力并保障横向稳定性,有效提升紧急制动工况下的制动效能与操控安全性。研究涵盖了从车辆建模、滑移率特性分析、PID控制器设计到联合仿真验证的全过程,并提供了完整的仿真模型、MATLAB/Simulink代码及参考文献,为相关领域的科研与工程实践提供了详实的技术参考。; 适合人群:具备车辆工程、自动化或控制理论基础知识,从事汽车电控系统开发、自动驾驶或车辆动力学仿真的研究生、工程师及科研人员。; 使用场景及目标:① 实现ABS系统的核心控制逻辑,掌握滑移率控制的关键技术;② 学习Carsim与Simulink联合仿真的搭建方法,进行车辆动力学与控制算法的协同仿真;③ 基于PID控制策略优化制动性能,完成相关学术研究或工程项目。; 阅读建议:在学习过程中,应结合所提供的完整仿真模型和代码,深入理解车辆动力学与ABS控制的交互机制,重点分析不同路面附着系数下最优滑移率的设定及PID参数的整定过程,以达到最佳的仿真效果和理论认知。
R语言SCINature绘图模板SCI科研绘图-雷达图
R语言SCINature绘图模板SCI科研绘图--雷达图
JESD82-543 DDR5MRCD03 Multiplexed Rank Registering Clock Driver.rar
JESD82-543 DDR5MRCD03 Multiplexed Rank Registering Clock Driver.rar
【多机器人路径规划】基于动态边权膨胀与节点预留历史机制的多智能体无冲突轨迹生成方法(Matlab代码实现)
内容概要:本文提出了一种基于动态边权膨胀与节点预留历史机制的多智能体无冲突轨迹生成方法,旨在高效解决多机器人路径规划中的碰撞与死锁问题。该方法通过动态调整路径图中边的权重以反映局部拥堵状况,实现路径的实时优化;同时引入节点预留机制,记录各机器人对路径节点的占用历史,确保时空冲突的有效规避。算法融合了路径搜索、冲突检测、权重自适应更新与调度协调等核心模块,形成了完整的无冲突轨迹规划框架,并配套提供了Matlab代码实现,便于算法验证与性能分析。该方法在复杂动态环境中表现出良好的鲁棒性与可扩展性,适用于多机器人系统的协同运动控制。; 适合人群:具备一定编程基础和路径规划基础知识,从事自动化、机器人、智能交通、智能制造等相关领域的科研人员、工程技术人员及研究生。; 使用场景及目标:①应用于仓储物流、智能工厂、无人驾驶车队等多智能体协同作业场景中的路径规划与动态避障;②为解决多机器人系统中的路径冲突、通信协调与死锁预防等关键技术难题提供理论支持与算法工具;③通过Matlab仿真平台复现算法逻辑,进行不同规模与场景下的性能测试、对比分析与算法优化。; 阅读建议:建议读者结合提供的Matlab代码逐模块实现与调试,重点理解动态边权调整策略的设计原理与节点预留机制的实现细节,通过设置不同初始条件与障碍环境开展仿真实验,以全面掌握算法的运行机制与优化潜力。


