时间:2022-07-11 10:13:40 | 栏目:C代码 | 点击:次
本文实例为大家分享了C语言用链表实现学生籍贯管理系统的具体代码,供大家参考,具体内容如下
#include<stdio.h> #include<stdlib.h> #include<string.h> //定义一个学生结构体 typedef struct student { char no[12]; //学号 char name[40]; //姓名 char tele[20]; //电话号码 int D[18]; //电话号码码 char jg[60]; //籍贯 char addr[80]; //通讯地址 struct student* next; //指向下一节点的指针 }STU; //函数声明放在这里 STU* LIstInit(STU* L); STU* ListCreate(STU* L, int n); void ListInsert(STU* L); void ListDelete(STU* L, char n[40]); void LIstSearch(STU* L, char n[]); void input(STU* p, int i); void output(STU* L); void menu(); //创建表头,初始化链表 STU* LIstInit(STU* L) { STU* head = NULL; head = (STU*)malloc(sizeof(STU)); head->next = NULL; L = head; return L; } //创建链表,将新生成的节点插入到链表的表头 STU* ListCreate(STU* L, int n) { int i; for (i = 0; i < n; i++) { STU* p; //将新生成的节点插入到链表中 p = NULL; p = (STU*)malloc(sizeof(STU)); input(p, i); p->next = L->next; L->next = p; } return L; } //对链表进行节点的插入操作 void ListInsert(STU* L) { STU* s = NULL; //生成一个新节点s s = (STU*)malloc(sizeof(STU)); printf("请输入您要插入的学生的学号:"); scanf("%s", &s->no); printf("请输入您要插入的学生的姓名:"); scanf("%s", &s->name); printf("请输入您要插入的学生的电话号码:"); scanf("%s", &s->tele); printf("请输入您要插入的学生的身份证号码:"); scanf("%s", &s->D); printf("请输入您要插入的学生的籍贯:"); scanf("%s", &s->jg); printf("请输入您要插入的学生的通讯地址:"); scanf("%s", &s->addr); s->next = L->next; L->next = s; } //对链表的进行节点的删除操作 void ListDelete(STU* L, char n[]) { STU* p = L->next, * pre = L; //定义p指针指向头节点的指向,定义pre指向头节点,pre始终指向p的前驱节点 if (p == NULL) printf("数据为空,无法删除!"); else { while (strcmp(p->name, n) != 0) { pre = p; p = pre->next; if (p == NULL) { printf("没有找到相关信息,无法删除\n"); return; } } pre->next = p->next; free(p); printf("删除成功"); } } void LIstSearch(STU* L, char n[]) { STU* p = L->next; if (p == NULL) printf("数据为空,无法查找!"); else { while (strcmp(p->name, n) != 0) { p = p->next; if (p == NULL) { printf("没有找到相关信息\n"); return; } } printf("该学生的籍贯为:\n"); printf("\t%s\n", p->jg); } } void ListModify(STU* L, char na[]) { char JG[60]; STU* p = L->next; while (p != NULL) { if (strcmp(p->name, na) == 0) { printf("请选择您修改后的学生籍贯:\n"); scanf("%s", &JG); strcpy(p->jg, JG); break; } p = p->next; } } void input(STU* p, int i) { printf("请输入第%d名学生的学号:", i + 1); scanf("%s", &p->no); printf("请输入第%d名学生的姓名:", i + 1); scanf("%s", &p->name); printf("请输入第%d名学生的电话号码:", i + 1); scanf("%s", &p->tele); printf("请输入第%d名学生的身份证号码:", i + 1); scanf("%s", &p->D); printf("请输入第%d名学生的籍贯:", i + 1); scanf("%s", &p->jg); printf("请输入第%d名学生的通讯地址:", i + 1); scanf("%s", &p->addr); } void output(STU* L) { STU* p = L->next; while (p != NULL) { printf("%s\t", p->no); printf("%s\t", p->name); printf("\t%s", p->tele); printf("\t\t%s", p->D); printf("\t%s", p->jg); printf("\t%s", p->addr); printf("\n"); p = p->next; } } void PrintFile(STU* L) { STU* p = L->next; FILE* fp; fp = fopen("student.txt", "w"); fprintf(fp, "学号\t\t姓名\t\t电话号码\t\t身份证号码\t\t籍贯\t\t通讯地址\n"); while (p != NULL) { fprintf(fp, "%s\t", p->no); fprintf(fp, "%s\t", p->name); fprintf(fp, "\t%s", p->tele); fprintf(fp, "\t%s", p->D); fprintf(fp, "\t%s", p->jg); fprintf(fp, "\t\t%s", p->addr); fprintf(fp, "\n"); p = p->next; } printf("保存成功,请到当前目录下的student.txt文件中查看"); fclose(fp); } void menu() { printf("\n\n"); printf("\t\t\t===================学试报名管理系统===================\n"); printf("\t\t\t* 作者:XXX 班级:XXXXXXXX 学号:XXXXXXXXXXXXXXX *\n"); printf("\t\t\t* *\n"); printf("\t\t\t* 1>. 录入学生的相关信息 *\n"); printf("\t\t\t* 2>. 全部学生的相关信息 *\n"); printf("\t\t\t* 3>. 查找某个就学生的籍贯 *\n"); printf("\t\t\t* 4>. 修改某个学生的籍贯 *\n"); printf("\t\t\t* 5>. 删除某个学生的相关信息 *\n"); printf("\t\t\t* 6>. 插入某个学生的相关信息 *\n"); printf("\t\t\t* 7>. 保存学生信息 *\n"); printf("\t\t\t* 0>. 退出管理系统 *\n"); printf("\t\t\t* 欢迎使用本系统!*\n"); printf("\t\t\t=====================================================\n"); printf("\t\t\t输入选项,按回车进入选项: \n"); } int main() { int item, n; //item用于接收输入的命令,n用于接收输入的学生人数 char nam[30]; STU* L = NULL; L = LIstInit(L); do { menu(); printf("请输入相应的数字,进行相应的操作:\n"); scanf("%d", &item); switch (item) { case 1: printf("请输入您要录入的学生人数:"); scanf("%d", &n); L = ListCreate(L, n); break; case 2: printf("全部学生信息如下:\n"); printf("学号\t\t姓名\t\t电话号码\t\t身份证号码\t\t籍贯\t\t通讯地址\n"); output(L); break; case 3: printf("请输入您要查找的学生姓名:"); scanf("%s", nam); LIstSearch(L, nam); break; case 4: printf("请输入您要修改的学生姓名:"); scanf("%s", nam); ListModify(L, nam); break; case 5: printf("请输入您要删除的学生的姓名:"); scanf("%s", nam); ListDelete(L, nam); break; case 6: ListInsert(L); break; case 7: PrintFile(L); break; case 0: printf("即将退出学生籍贯管理系统....."); exit(0); default: break; } printf("\n\n\n\n"); } while (item); return 0; }
部分运行结果截图