首页 > 其他分享 >“c语言+结构体+链表”实现名片系统

“c语言+结构体+链表”实现名片系统

时间:2024-03-12 10:35:57浏览次数:15  
标签:名片 语言 head 链表 m1 printf gets card

//名片系统
//第一步: 创建名片 姓名: 年龄:(23) 手机号:(默认为171****3422) 地址:河南洛阳
// 公司: tzh 职务: 学员
//输出名片信息
//
//第二步: 删除已存在的名片
//
//第三步: 修改信息 #可指定修改内容
//
//第四步: 查询信息 #可查询相关姓名对应的信息
//
//第五步:退出系统
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#define LEN sizeof(struct card)
int len; //记录card数量

 

typedef struct card{ //用户信息的结构体
char username[20];
char age[20];
char phone[20];
char adress[20];
char company[20];
char job[20];
struct card *next; //指向下一个名片信息
} card;

//创建名片
struct card *create(){
card *head_cardlist;
card *c1,*c2; //初始化链表指针
char name[20];
len=0;
c1=(card *)malloc(LEN);
c2=c1;
printf("录入人员信息!\n");
printf("请输入你的姓名: ");
gets(name);
if(strcmp(name,"n") !=0){ //strcmp比较两个字符串,并根据比较结果返回一个整数
strcpy(c1->username,name); //strcpy把含有'\0'结束符的字符串复制到另一个地址空间
printf("请输入年龄: ");gets(c1->age); //名字信息输入e时结束名片录入
printf("请输入手机号:");gets(c1->phone);
printf("请输入地址:");gets(c1->adress);
printf("请输入公司:");gets(c1->company);
printf("请输入职位:");gets(c1->job);
head_cardlist = NULL;
while(1){
len=len+1; //个数
if(len==1){
head_cardlist=c1;
}
else{
c2->next=c1;
}
c2 = c1;
printf("请输入姓名:");
gets(name);
if(strcmp(name,"e") ==0){
break;
} else{
c1=(card *)malloc(LEN);
strcpy(c1->username,name);
printf("请输入年龄: ");gets(c1->age);
printf("请输入手机号:");gets(c1->phone);
printf("请输入地址:");gets(c1->adress);
printf("请输入公司:");gets(c1->company);
printf("请输入职位:");gets(c1->job);
}
}
c2->next =NULL;
return head_cardlist;
}
else{
return head_cardlist;
}
}

//删除名片
card *delete(card *head_card){
card *d1,*d2;
char name[20];
if(head_card == NULL){
printf("暂无名片,不能进行删除操作!\n");
}
printf("请输入您要删除名片的姓名: ");
gets(name);
for(d1=d2=head_card;d1 != NULL;){
if(strcmp(d1->username,name)==0){
d1=head_card;
head_card = head_card->next;
free(d1); //free():释放内存空间函数;
printf("该名片已删除成功!\n");
d2=d1=head_card;
len--;
return head_card;
}
else{
d2=d1;
d1=d1->next;
}
}
printf("您要删除的名片不存在\n");
return head_card;
}

//修改名片
void modify(card *head_card){
card *m1,*m2;
char name[20];
int M=0;
if(head_card == NULL){
printf("暂无名片,不能进行修改!");
}
m1 =head_card;
if(m1 !=NULL){
printf("请输入要修改名片的姓名:");
gets(name);
while(strcmp(m1->username ,name) !=0 && m1->next !=NULL ){
m2=m1;
m1=m1->next ;
}
if(strcmp(m1->username ,name)==0){
M++;
printf("-----您要修改的名片是-----");
printf("姓名:%s\n年龄:%s\n手机号:%s\n地址:%s\n公司:%s\n职位:%s\n",\
m1->username,m1->age,m1->phone,m1->adress,m1->company,m1->job);
printf("--------------------------");
switch(1){
case 1:{
printf("请输入姓名: ");
gets(name);
strcpy(m1->username,name);
printf("姓名已修改为:%s\n",m1->username );
}
case 2:{
char modifyage[20];
printf("请输入年龄: ");
gets(modifyage);
strcpy(m1->age,modifyage);
printf("年龄已修改为:%s\n",m1->age );
}
case 3:{
char modifyphone[20];
printf("请输入电话号: ");
gets(modifyphone);
strcpy(m1->phone,modifyphone);
printf("电话号已修改为:%s\n",m1->phone );
}
case 4:{
char modifyadress[20];
printf("请输入地址: ");
gets(modifyadress);
strcpy(m1->adress,modifyadress);
printf("地址已修改为:%s\n",m1->adress );
}
case 5:{
char modifycompany[20];
printf("请输入公司: ");
gets(modifycompany);
strcpy(m1->company,modifycompany);
printf("公司已修改为:%s\n",m1->company );
}
case 6:{
char modifyjob[20];
printf("请输入职位: ");
gets(modifyjob);
strcpy(m1->job,modifyjob);
printf("职位已修改为:%s\n",m1->job );
}
break;
default:
printf("您输入有误,请重新操作!\n");
break;
}
}
if(M == 0){
printf("无此人信息,不能进行修改!\n");
}
}
}

//查询名片
void search(card *head_card){
card *s1;
char name[20];
int S=0;
if(head_card == NULL){
printf("暂无此人!");
}
s1 = head_card;
if(s1 !=NULL){
printf("请输入所查询人姓名:");
gets(name);
while(strcmp(s1->username,name) != 0 && s1->next != NULL)
{
s1=s1->next;
}
if(strcmp(s1->username,name) == 0){
S++;
printf("联系人:\n姓名:%s\n年龄:%s\n手机号:%s\n地址:%s\n公司:%s\n职位:%s\n",\
s1->username,s1->age,s1->phone,s1->adress,s1->company,s1->job);
}
if( S==0){
printf("无此人名片\n");
}
}
}


//显示名片
void show(card *head_card){
card *p;
p= head_card;
if(p != NULL){
printf("已记录名片共有%d人;\n",len);
if(p !=NULL){
do{
printf("姓名:%s\n年龄:%s\n手机号:%s\n地址:%s\n公司:%s\n职位:%s\n",\
p->username,p->age,p->phone,p->adress,p->company,p->job);
p = p->next;
}while(p !=NULL);
}
}
else{
printf("空!\n");
}
}

void menu(){ //显示初始页面系统选项
printf("---------名片系统---------\n");
printf(" [0]退出系统\n");
printf(" [1]创建名片\n");
printf(" [2]删除名片\n");
printf(" [3]修改名片\n");
printf(" [4]查询名片\n");
printf("---------------------------\n");
printf("请输入功能选项(0~4):");
}

int main(){
struct card *pc=NULL;
int n; //定义输入的数字选项;
while(1){
menu();
if(n>=0 && n<=4){
scanf("%d",&n);
fflush(stdin); //刷新、清空输入缓冲区
}
else{
printf("您输入错误!\n");
return 0;
}

switch(n){
case 1:{
pc= create();
show(pc);
}break;
case 2:{
delete(pc);
}break;
case 3:{
modify(pc);
show(pc);
}break;
case 4:{
search(pc);
}break;
case 0:
printf("您已退出当前系统!\n");
break;
}
if(n==0){
break;
}
}
return 0;
}

 

标签:名片,语言,head,链表,m1,printf,gets,card
From: https://www.cnblogs.com/xiaoshangbulang/p/18067739

相关文章

  • Go 语言开发环境搭建
    Go语言开发环境搭建Go语言开发环境搭建一.GO环境安装1.1下载Go官网:https://golang.org/dl/Go镜像站(推荐):https://golang.google.cn/dl/1.2Go版本的选择默认下载最新自己对应的平台即可。  1.3安装1.3.1Windows安装打开下载的安装程序(.msi文件),然后按照......
  • 86 单链表的分解
    你说你会改变,但是你只是为了解决当时的冲突而讲的话。给你一个链表头节点head和x,要求链表中所有小于x的节点都出现在大于或等于x的节点之前例如:head=[1,4,3,2,5,2],x=3;输出:[1,2,2,4,3,5]在合并两个链表的时候,是将两个链表合并成一个,拆分的时候,是将一个链表拆分成两个。......
  • 第四节:链表相关(删除倒数第N节点、相邻位置交换)
    一.删除倒数第N个节点一.题目描述  给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。  示例:  leetcode地址:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/  难度:【中等】二.思路分析   (经典的链......
  • 【算法】【线性表】【链表】合并 K 个升序链表
    1 题目给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1-......
  • R语言拟合线性混合效应模型、固定效应随机效应参数估计可视化生物生长、发育、繁殖影
    全文链接:https://tecdat.cn/?p=35338原文出处:拓端数据部落公众号本文将介绍如何设置工作目录、读取数据、标准化数据、拟合线性混合效应模型、提取随机效应参数、绘制相关性图和Dot-and-Whisker图,以帮助研究人员更好地理解数据并进行有效的数据分析。通过这些步骤,我们可以深入了......
  • R语言GARCH族模型:正态分布、t、GED分布EGARCH、TGARCH的VaR分析股票指数|附代码数据
    全文链接:http://tecdat.cn/?p=31023最近我们被客户要求撰写关于GARCH族模型的研究报告,包括一些图形和统计输出。如何构建合适的模型以恰当的方法对风险进行测量是当前金融研究领域的一个热门话题 ( 点击文末“阅读原文”获取完整代码数据******** )。VaR方法作为当前业内比较......
  • C语言清空输入缓冲区
    在C语言中,清空输入缓冲区通常是为了清除任何残留在输入缓冲区中的数据,这些数据可能会干扰后续的输入操作。以下是几种清空输入缓冲区的方法:使用 fflush(stdin) 函数:这个方法在C语言标准中并不推荐,因为它并不被所有的编译器和操作系统支持。ffflush不是标准库函数,在gcc下是不......
  • 排序链表(自底向上归并排序)
    题目:时间复杂度:O(nlogn),空间复杂度:O(1)structListNode{intval;ListNode*next;ListNode():val(0),next(nullptr){}ListNode(int_val):val(_val),next(nullptr){}ListNode(int_val,ListNode*_next):val(_val),next(_next){}};class......
  • 实验1 C语言输入输出和简单程序编写
    task1_1.c`#include<stdio.h>include<stdlib.h>intmain(){printf("O\n");printf("\n");printf("II\n");printf("O\n");printf("\n");printf("II\n");system("pause&......
  • C语言训练2201-2205
    1.C语言编程001–HelloWorld#include<stdio.h>intmain(){printf("Helloworld\n");printf(“早上好,UAV2201同学们!\n");return0;}2.C语言编程002-执行算术运算(程序直接赋值)#include<stdio.h>intmain(void){inta,b,sum;......