69,369
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct student {
long number;
char name[10];
int age;
char sex[4];
char birth[10];
char address[30];
char tele[12];
struct student *next;
} STU, *Pointer;
void read(Pointer * Head);
void insert(Pointer * Head);
void show(Pointer Head);
void search(Pointer Head);
void update(Pointer Head);
void dele(Pointer * Head);
void save(Pointer Head);
int main()
{
Pointer Head = NULL;
int i;
printf("*************************************************\n");
printf
("------------欢迎使用学生信息管理系统-------------\n");
printf("*************************************************\n");
do {
printf("\n");
printf("0---读取现有文件\n");
printf("1---录入\n");
printf("2---浏览\n");
printf("3---查询\n");
printf("4---修改\n");
printf("5---删除\n");
printf("6---保存并退出\n");
printf("请选择一项任务:");
scanf("%d", &i);
switch (i) {
case 0:
read(Head);
break;
case 1:
insert(Head);
break;
case 2:
show(Head);
break;
case 3:
search(Head);
break;
case 4:
update(Head);
break;
case 5:
dele(Head);
break;
case 6:
save(Head);
break;
default:
printf("错误选择!请重选");
break;
}
} while (i != 6);
save(Head);
return 0;
}
void read(Pointer * Head)
{
FILE *fp;
Pointer p, q, r;
int count = 0;
r = (Pointer) malloc(sizeof(STU));
r->next = NULL;
if (r == NULL)
printf("分配空间失败!");
*Head = r;
if ((fp = fopen("d:\\student.txt", "rb")) == NULL)
printf("打开文件失败!!");
while (!feof(fp)) {
p = (Pointer) malloc(sizeof(STU));
if (p == NULL)
printf("分配空间失败!");
}
q = *Head;
*Head = q->next;
if (count == 0)
printf("文件没有数据!!");
fclose(fp);
printf("\n读入文件成功,记录总数为:%d\n", count);
fclose(fp);
}
void insert(Pointer * Head)
{
int number;
Pointer p, q, r;
printf("请输入学号:");
scanf("%ld", &number);
p = q = *Head;
while (p != NULL) {
if (p->number == number) {
printf("已经有相同的学号!!");
return;
} else {
q = p;
p = p->next;
}
}
r = (Pointer) malloc(sizeof(STU));
r->next = NULL;
if (r == NULL) {
printf("分配空间失败!");
return;
}
if (q == NULL)
*Head = r;
else
q->next = r;
r->number = number;
printf("请输入姓名:");
scanf("%s", r->name);
printf("请输入年龄:");
scanf("%d", &r->age);
printf("请输入性别:");
scanf("%s", r->sex);
printf("请输入出生年月:");
scanf("%s", r->birth);
printf("请输入地址:");
scanf("%s", r->address);
printf("请输入联系电话:");
scanf("%s", r->tele);
}
void show(Pointer Head)
{
Pointer p;
p = Head;
if (p == NULL) {
printf("没有数据!!");
return;
}
while (p != NULL) {
printf("\n");
printf("学号:%-16ld", p->number);
printf("姓名:%-12s", p->name);
printf("年龄:%-10d", p->age);
printf("性别:%-4s\n", p->sex);
printf("出生年月:%-12s", p->birth);
printf("地址:%-30s\n", p->address);
printf("联系方式:%-12s", p->tele);
p = p->next;
}
}
void search(Pointer Head)
{
int t;
int flag;
long number;
char name[10];
Pointer p;
while (1) {
printf("\n------------------\n");
printf("1.按学号查询\n");
printf("2.按姓名查询\n");
printf("3.退出本菜单\n");
printf("------------------\n");
printf("请选择子菜单编号:");
scanf("%d", &t);
flag = 1;
switch (t) {
case 1:
printf("请输入学号:");
scanf("%ld", &number);
p = Head;
while (p != NULL && flag) {
if (p->number == number)
{
printf("\n");
printf("学号:%-16ld", p->number);
printf("姓名:%-12s", p->name);
printf("年龄:%-10d", p->age);
printf("性别:%-4s\n", p->sex);
printf("出生年月:%-12s", p->birth);
printf("地址:%-30s\n", p->address);
printf("联系方式:%-12s", p->tele);
flag = 0;
} else
p = p->next;
}
if (flag)
printf("没有查询到!!");
break;
case 2:
printf("请输入姓名:");
scanf("%s", name);
flag = 1;
p = Head;
while (p != NULL && flag) {
if (strcmp(p->name, name) == 0)
{
printf("\n");
printf("学号:%-16ld", p->number);
printf("姓名:%-12s", p->name);
printf("年龄:%-10d", p->age);
printf("性别:%-4s\n", p->sex);
printf("出生年月:%-12s", p->birth);
printf("地址:%-30s\n", p->address);
printf("联系方式:%-12s", p->tele);
flag = 0;
} else
p = p->next;
}
if (flag)
printf("没有查询到!");
case 3:
return;
default:
printf("请在1-3之间选择\n");
}
}
}
void update(Pointer Head)
{
int flag = 1;
long number;
Pointer p;
printf("请输入学号:");
scanf("%ld", &number);
p = Head;
while (p != NULL && flag) {
if (p->number == number) {
printf("请输入姓名:");
scanf("%s", p->name);
printf("请输入年龄:");
scanf("%d", &p->age);
printf("请输入性别:");
scanf("%s", p->sex);
printf("请输入出生年月:");
scanf("%s", p->birth);
printf("请输入地址:");
scanf("%s", p->address);
printf("请输入联系电话:");
scanf("%s", p->tele);
flag = 0;
} else
p = p->next;
}
if (flag)
printf("没有查询到!!");
}
void dele(Pointer * Head)
{
int flag = 1;
long number;
Pointer p, q;
printf("请输入学号:");
scanf("%ld", &number);
p = q = *Head;
while (p != NULL && flag) {
if (p->number == number) {
if (p == *Head) {
*Head = p->next;
free(p);
} else {
q->next = p->next;
free(p);
}
flag = 0;
} else {
q = p;
p = p->next;
}
}
if (flag)
printf("没有查询到!!");
}
void save(Pointer Head)
{
FILE *fp;
Pointer p;
if ((fp = fopen("d:\\student.txt", "wb")) == NULL) {
printf("打开文件失败!!");
exit(1);
}
for (p = Head; p != NULL; p = p->next)
fwrite(p, sizeof(STU), 1, fp);
}
没细看,但编译期错误是你的声明和定义不一致。参数是二级指针的,你传了一级指针。 目前可以通过编译了。