首页 > 学院 > 开发设计 > 正文

数据结构-链表的简实现->学生管理系统

2019-11-06 07:36:10
字体:
来源:转载
供稿:网友

 C++第一节课,老师给我们留了个作业,用C语言实现学生管系统。

要求实现:增删改查(包含文件操作)

本学渣就腆着脸发出来了。简单小程序。C语言初学的一点小应用

#include<stdio.h>#include<stdlib.h>#include<string.h>#define F_PATH "D://a//info.dat"typedef struct st_info {	char number[10];	int sex;	char name[20];	char native_place[10];	int birth[3];	struct st_info *next;}info;typedef info *point;void menu0();void menu1();void wr(point head);point create(void);point find(point head, point comp);point del(point head);void addition(point head);void modify(point head);void search(point head);int main(void){	int i;	point head;	head = NULL;	menu0();	head=create();	menu1();	scanf("%d", &i);		while (i==1||i==2||i==3||i==4||i==5)		{			if (i == 1) addition(head);			if (i == 2) head = del(head);			if (i == 3) modify(head);			if (i == 4) search(head);			if (i == 5) wr(head);			PRintf("如还需完成其他操作,/n请再次输入数字,否则请直接输入数字5退出/n");			scanf("%d", &i);		}	return 0;}void menu0(void){	printf("********************************************/n");	printf("***********欢迎使用学生管理系统*************/n");	printf("***********以下是系统的使用菜单*************/n");	printf("**********正在载入已储存学生信息************/n");}void menu1(void) {	printf("*------------*-*-*-****-*-*-*--------------*/n");	printf("**************1.增加学生信息****************/n");	printf("**************2.删除学生信息****************/n");	printf("**************3.修改学生信息****************/n");	printf("**************4.查找学生信息****************/n");	printf("*************5.储存修改并退出***************/n");	printf("********请按照你的需求输入相应的数字********/n");	printf("*********如果有过信息修改请一定保存*********/n");	printf("********************************************/n");};point create(void)//初始化读取文件信息函数{	FILE *fp;	int flag, i;	point cr, use,head;	head = NULL;	use = NULL;	flag = 1;	fp = fopen(F_PATH, "ab+");	while(1)	{	cr = (info*)malloc(sizeof(info));	cr->next = NULL;	fscanf(fp, "%s", cr->name);	fseek(fp, 1L, SEEK_CUR);	fscanf(fp, "%d", &cr->sex);	fseek(fp, 1L, SEEK_CUR);	fscanf(fp, "%s", cr->native_place);	fseek(fp, 1L, SEEK_CUR);	for (i = 1; i <= 3; i++)   fscanf(fp, "%d", &cr->birth[i - 1]);	fscanf(fp, "%s", cr->number);	if(flag==1) {		head = cr;		use=cr;}	else		{			use->next=cr;			use=use->next;		}	flag++;	if (feof(fp)) break;	}	fclose(fp);	return head;}void wr(point head)//信息再次储存函数 {	point c;	FILE *fp;	int flag = 0;	c = head;	fp = fopen(F_PATH, "w");	while (head)	{		fprintf(fp, "%s %d %s %d %d %d", head->name, head->sex, head->native_place, head->birth[0], head->birth[1], head->birth[2]);			if(head->next) fputc('/n', fp);		head = head->next;		free(c);		c = head;	}}void addition(point head)//增加函数{	point b;	b = (info*)malloc(sizeof(info));	b->next = head->next;	head->next = b;	printf("请输入要插入学生的姓名/n");	{		scanf("%s", b->name);	}		printf("请输入要插入学生的性别(男1女0)/n");	{		scanf("%d", &b->sex);	}	printf("请输入要插入学生的籍贯/n");	{		scanf("%s", b->native_place);	}	printf("请按格式(XXXX-X-X)/n");	{		scanf("%d-%d-%d", &b->birth[0], &b->birth[1], &b->birth[2]);	}	printf("输入要插入的学生学号/n");	{		scanf("%s", b->number);	}	printf("谢谢使用,学生信息已录入/n");}point find(point head,point comp)  //查找核心功能{	printf("请输入学生的学号");	char re[10];	int a;	point s;	s = head;	scanf("%s", re);	a = 0;	while (s)	{		if (!strcmp(re, s->number)) {			comp = s;			break;		}		s = s->next;	}	return comp;} void search(point head)//查找函数{	point s;	int i;	s = NULL;	s = find(head,s);	if (s!=NULL) {		printf("查得该学生,是否需要查看该学生信息,需要请输入1,不需要请输入0/n");		scanf("%d", &i);		if (i == 0) {			printf("该学生的姓名为%s/n", s->name);			if (s->sex)	printf("该人为男/n");			else printf("性别为女/n");			printf("籍贯为%s/n", s->native_place);			printf("生日为%d年%d月%d日/n", s->birth[0], s->birth[1], s->birth[2]);		}	}	else		{			printf("查无此人,也可能是学号输入错误,如有疑问可以再次查询") ;		}}point del(point head)// 删除函数{	printf("请输入要删除的学号");	char re[10];	int a;	point s,q;	s = q = head;	scanf("%s", re);	a = 0;	if (!strcmp(re, s->number)) 	{		head = head->next;		return head;	}	else	{		s = s->next;	}	while (s)	{		if (!strcmp(re, s->number)) 		{			a = 1;			break;		}		q = s;		s = s->next;	}		if (a) 	{		q->next = s->next;		free(s);	}	if (a==0)	{		printf("在查找的过程中别没有查找到这个人,请尝试重新操作,也有可能是该学生信息已经被删除/n");	}	return head;}void modify(point head)//修改函数{	printf("请输入想要修改的学生现在最后一次储存的学号");	point comp;	comp = NULL;	comp = find(head,comp);	if (comp!=NULL) {		printf("请输入你想要修改的学生的信息选项:/n*1.修改学号*/n*2.修改姓名*/n*3.修改籍贯*/n*4.修改生日*/n*(PS:由于法律,性别暂无法修改)*");		int a;		scanf("%d", &a);		if (a == 1) {			char m[10];			printf("请输入学号/n"); 			scanf("%s", m);			memset(comp->number, 0, 10 * sizeof(char));			comp->number[0] = '/0';			strcpy(comp->number, m);		}		else if (a==2)		{			char m[20];			printf("请输入姓名/n");			scanf("%s", m);			memset(comp->name, 0, 20 * sizeof(char));			comp->name[0] = '/0';			strcpy(comp->name, m);		}		else if (a==3)		{			char m[20];			printf("请输入籍贯/n");			scanf("%s", m);			memset(comp->native_place, 0, 20 * sizeof(char));			comp->native_place[0] = '/n';			strcpy(comp->native_place, m);		}		else if (a==4)		{			int m;			printf("请输入性别,男请输入1,女输入2/n");			scanf("%d", &m);			comp->sex = m;		}		else		{			printf("您输入有误,如有需要,请重试/n");		}	}	else	{		printf("对不起,你输入的学号信息有误,请重试/n");	}}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表