#include<stdio.h>
#include<stdlib.h>
#include<string>
typedef struct LNode {
char name[20];
char phone[10];
int number;
struct LNode* next;
}LNode, * LinkList;
void choose();
LinkList creatlist();
void disp(LinkList L);
void search(LinkList L);
void del(LinkList L);
void change(LinkList L);
void insert(LinkList L);
void menu();
int main() {
choose();
return 0;
}
void choose() {
LinkList L = NULL;
int n, a = 1;
while (a > 0) {
menu();
printf("请选择功能");
scanf_s("%d", &n);
switch (n) {
case 1:
L = creatlist();
break;
case 2:
disp(L);
break;
case 3:
search(L);
break;
case 4:
del(L);
break;
case 5:
insert(L);
break;
case 6:
change(L);
break;
default:
a = -1;
break;
}
}
}
void menu() {
printf("\n\n");
printf("\t\t 欢迎使用个人电话薄管理系统\n ");
printf("\t\t1.创建电话薄\n");
printf("\t\t2.输出全部电话薄\n");
printf("\t\t3.查询某人电话\n");
printf("\t\t4.删除某人\n");
printf("\t\t5.插入某人电话\n");
printf("\t\t6.修改某人电话\n");
printf("\t\t7.退出\n");
}
LinkList creatlist() {
int n;
LinkList L = (LinkList)malloc(sizeof(LNode));
LinkList r = NULL;
L->next = NULL;
r = L;
printf("需要创建多少人的电话薄呢?");
scanf_s("%d", &n, 50);
L->number = n;
for (int i = 0; i < n; i++) {
LinkList p = (LinkList)malloc(sizeof(LNode));
printf("第%d人的姓名:", i + 1);
scanf_s("%s", &p->name, 20);
printf("第%d人的电话:", i + 1);
scanf_s("%s", &p->phone, 10);
p->next = NULL;
r->next = p;
r = p;
}
return L;
}
void disp(LinkList L) {
LinkList p = NULL;
p = L;
if (p == NULL) {
printf("暂无数据");
}
else {
printf("共有%d人的数据\n", L->number);
for (int i = 0; i < L->number; i++) {
p = p->next;
printf("姓名:%s\n", p->name);
printf("电话:%s\n", p->phone);
}
}
}
void search(LinkList L) {
char a[10];
int conter=0;
LinkList p = L;
printf("要查找的姓名是:");
scanf_s("%s", a, 10);
for (int i = 0; i < L->number; i++) {
if (strcmp(a, p->name) == 0) {
printf("查找成功!\n");
printf("姓名:%s", p->name);
printf("电话:%s\n", p->phone);
conter++;
break;
}
p = p->next;
}
if (conter == 0)
printf("查无此人");
}
void del(LinkList L) {
char a[10];
int i;
LinkList p=L,q;
q = (LinkList)malloc(sizeof(LNode));
if (p == NULL) {
printf("数据暂无。");
}
printf("要删除的姓名是:");
scanf_s("%s", a, 10);
while (strcmp(a, p->name) != 0) {
q = p;
p = p->next;
}
if (strcmp(a,p->name)==0){
printf("查找成功\n");
q->next= p->next;
free(p);
printf("删除成功");
(L->number) = L->number - 1;
}
else {
printf("查无此人");
}
}
void insert(LinkList L) {
LinkList p = L;
int i;
if (p == NULL) {
printf("你没有创建电话薄");
}
while (p->next != NULL) {
p = p->next;
}
LinkList s = (LinkList)malloc(sizeof(LNode));
printf("姓名:");
scanf_s("%s", &s->name, 10);
printf("\n电话:");
scanf_s("%s", &s->phone, 10);
p->next = s;
s->next = NULL;
L->number = L->number + 1;
}
void change(LinkList L) {
LinkList p = L;
int i, j=0;
char a[10];
if (p == NULL) {
printf("你没有创建电话薄的呢");
}
else {
printf("你要修改的电话人的姓名是:");
scanf_s("%s", a, 10);
for (i = 0; i < L->number; i++) {
p = p->next;
if (strcmp(a, p->name) == 0) {
printf("查找成功\n");
printf("姓名修改为:");
scanf_s("%s", &p->name, 10);
printf("电话修改为:");
scanf_s("%s", &p->phone, 10);
j++;
break;
}
}
if (j == 0)
printf("查无此人");
}
}
这里用C语言实现了一个电话薄管理系统,
注意下删除这块吧
算法大体为设立一个新的结构体记录循环中的上一个节点
而让循环的节点向下调
匹配成功时将上一个节点指向下一个节点的next
其次就是
visual 2019 中 对字符串的输入进行了把控
需要设立最大输入的字符串数
在一定程度上防止了溢出操作
最后
strcmp 函数超好用
大体上花了2个多小时
效率过低
数据库
like 语句
正则表达式 “%a” ^ __ 的使用
MySQL workbench的使用
join on 语句的使用 可以用于输出连接两个数据库
还是一句
效率过低