参考代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char sn[10];
char name[10];
char sex[3];
char class[12];
}Student;
void input(Student *T,int n)//输入函数
{
int i;
printf("输入:学号 姓名 性别 班号(用空格隔开)\n");
for(i=0;i<n;i++)
scanf("%s%s%s%s",T[i].sn,T[i].name,T[i].sex,T[i].class);
}
void display(Student *T,int n)//输出函数
{
int i;
for(i=0;i<n;i++)
{
printf("%s\t%s\t%s\t%s\n",T[i].sn,T[i].name,T[i].sex,T[i].class);
}
}
void sou(Student *T,int n)
{
int i;
char sn[10];
printf("请输入学号:");
scanf("%s", sn);
for(i=0;i<n;i++)
{
if (strcmp(sn, T[i].sn)==0)
{
printf("%s\t%s\t%s\t%s\n",T[i].sn,T[i].name,T[i].sex,T[i].class);
return;
}
}
printf("没有找到\n");
}
int main()
{
Student *T;//定义一个结构体类型指针T;
int n;
printf("录入学生人数:\n");
scanf("%d",&n);
T=(Student *)malloc(sizeof(Student)*n);
input(T,n);//调用输入函数
printf("\n");
printf("输出信息:\n");
display(T,n);//调用输出函数
sou(T,n);
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
如果使用的是c语言编译器,把scanf_s改为scanf,如果用的是visual studio就不用改
#include"stdio.h"
#include"stdlib.h"
#define Max 100
#define SIZE 12
void showMenu()//菜单功能
{
printf("\t*************************\n") ;
printf("\t***** 1、添加联系人 *****\n") ;
printf("\t***** 2、显示联系人 *****\n") ;
printf("\t***** 3、姓名查找人 *****\n") ;
printf("\t***** 4、学号查找人 *****\n") ;
printf("\t***** 5、修改联系人 *****\n") ;
printf("\t***** 6、删除联系人 *****\n") ;
printf("\t***** 7、清空通讯录 *****\n") ;
printf("\t***** 0、退出通讯录 *****\n") ;
printf("\t*************************\n") ;
}
struct student
{
char s_Name[SIZE];//学生姓名
int s_No;//学生学号
int s_Age;//学生年龄
char s_Phone[SIZE];//电话号码
char s_Class[SIZE];//所在班级
int s_Address[SIZE];//寝室地址
};
struct studentAddressBooks
{
struct student S[Max];//创建学生通讯录数组
int s_size = 0;//记录当前学生通讯录大小
};
void addStudent(studentAddressBooks* abc)//添加联系人
{
if (abc->s_size >= Max)
{
printf("通讯录已满,添加失败\n");
}
else {
printf("添加联系人名字 :\n");
scanf_s("%s", &abc->S[abc->s_size].s_Name);
printf("联系人学号为 :\n");
scanf_s("%d",&abc->S[abc->s_size].s_No);
printf("联系人年龄为 :\n");
scanf_s("%d",&abc->S[abc->s_size].s_Age);
printf("联系人电话 :\n");
scanf_s("%s", abc->S[abc->s_size].s_Phone);
printf("联系人所在班级为:\n");
scanf_s("%s", abc->S[abc->s_size].s_Class);
printf("联系人宿舍号为 :\n");
scanf_s("%s", abc->S[abc->s_size].s_Address);
printf("添加成功\n");
//更新通讯录人数
abc->s_size++;
system("pause"); system("cls");
}
}
void showStudent(studentAddressBooks* abc)
{
if (abc->s_size == 0) printf("当前记录为空\n");
else {
for (int i = 0; i < abc->s_size; i++) {
printf("姓名: %s\t", abc->S[i].s_Name);
printf("学号: %d\t", abc->S[i].s_No);
printf("年龄: %d\t", abc->S[i].s_Age);
printf("电话: %s\t", abc->S[i].s_Phone);
printf("所在班级:%s\t", abc->S[i].s_Class);
printf("宿舍号: %s\t", abc->S[i].s_Address);
printf("\n");
}
}
system("pause"); system("cls");
}
int isExit1(studentAddressBooks* abc, char name[])//姓名判定通讯录是否有此人
{
for (int i = 0; i < abc->s_size; i++)
{
if (*abc->S[i].s_Name == *name) return i;
}
return -1;
}
int isExit2(studentAddressBooks* abc, int Sno)//学号判定通讯录是否有此人
{
for (int i = 0; i < abc->s_size; i++)
{
if (abc->S[i].s_No == Sno) return i;
}
return -1;
}
void nfindStudent(studentAddressBooks* abc)
{
printf("输入要查找联系人的名字:\n");
char name[SIZE]; scanf_s("%s",&name);
int i = isExit1(abc, name);
if (i != -1)
{
printf("姓名: %s\t", abc->S[i].s_Name);
printf("学号: %d\t", abc->S[i].s_No);
printf("年龄: %d\t", abc->S[i].s_Age);
printf("电话: %s\t", abc->S[i].s_Phone);
printf("所在班级:%s\t", abc->S[i].s_Class);
printf("宿舍号: %s\t", abc->S[i].s_Address);
printf("\n");
}
else {
printf("查无此人\n");
}
system("pause"); system("cls");
}
void sfindStudent(studentAddressBooks* abc)
{
printf("输入要查找联系人的学号:\n");
int Sno=0; scanf_s("%d",&Sno);
int i = isExit2(abc, Sno);
if (i != -1)
{
printf("姓名: %s\t", abc->S[i].s_Name);
printf("学号: %d\t", abc->S[i].s_No);
printf("年龄: %d\t", abc->S[i].s_Age);
printf("电话: %s\t", abc->S[i].s_Phone);
printf("所在班级:%s\t", abc->S[i].s_Class);
printf("宿舍号: %s\t", abc->S[i].s_Address);
printf("\n");
}
else {
printf("查无此人\n");
}
system("pause"); system("cls");
}
void modifyStudent(studentAddressBooks* abc)
{
printf("输入要修改的联系人名字\n");
char name[SIZE]; scanf_s("%s", &name);
int v = isExit1(abc, name);
if (v != -1)
{
printf("更改后联系人名字 :\n");
scanf_s("%s", &abc->S[v].s_Name);
printf("更改后联系人学号为 :\n");
scanf_s("%d", &abc->S[v].s_No);
printf("更改后联系人年龄为 :\n");
scanf_s("%d", &abc->S[v].s_Age);
printf("更改后联系人电话 :\n");
scanf_s("%s", abc->S[v].s_Phone);
printf("更改后联系人所在班级为:\n");
scanf_s("%s", abc->S[v].s_Class);
printf("更改后联系人宿舍号为 :\n");
scanf_s("%s", abc->S[v].s_Address);
printf("更改成功\n");
}
else {
printf("查无此人\n");
}
system("pause"); system("cls");
}
void deleteStudent(studentAddressBooks* abc)
{
if (abc->s_size == 0)
{
printf("当前记录为空\n");
}
else {
printf("输入要删除的联系人:\n");
char name[SIZE]; scanf_s("%s", &name);
int v = isExit1(abc, name);
if (v == -1) {
printf("查无此人\n");
}
else if (v != -1) {
for (int i = v; i < abc->s_size; i++)
{
abc->S[i] = abc->S[i + 1];
}
abc->s_size--;
printf("删除成功\n");
}
}
system("pause"); system("cls");
}
void clearStudent(studentAddressBooks* abc)
{
abc->s_size = 0;
printf("通讯录已清空\n");
system("pause"); system("cls");
}
int main()
{
//创建通讯录结构体变量
studentAddressBooks abc;
while (1) {
showMenu();
int select = 0;
printf("请选择你的操作:");
scanf_s("%d", &select);
switch (select)
{
case 1://添加联系人
addStudent(&abc);
break;
case 2://显示联系人
showStudent(&abc);
break;
case 3://按照姓名查找联系人
{
nfindStudent(&abc);
}
break;
case 4://按照学号查找联系人
{
sfindStudent(&abc);
}
break;
case 5://修改联系人
modifyStudent(&abc);
break;
case 6://删除联系人
{
deleteStudent(&abc);
}//case 语句 里的代码多的话就用{}括起来,不报错
break;
case 7://清空通讯录
clearStudent(&abc);
break;
case 0://退出通讯录
printf("欢迎下次使用,祝您生活愉快\n"); return 0; break;
default:
printf("请合理输入操作数0~7:\n");
scanf_s("%d", &select);
break;
}
}
}
多看看课本 肯定能写出来的
哪里出bug来了再来问
授人鱼不如授人以渔