学生管理系统(**C语言“链表**”)

学生管理系统(C语言“链表”)@[TOC](这

  1. 显示页面
  2. 功能设计
  3. 主函数
  4. 链表

显示界面

void menu()
{
	printf("--------------[学生信息管理系统]----------------\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("-------------------------------------------------\n");   
}

功能设计

void keyDown()
{
	int choice =0;
	struct student data;
	struct Node* pMove = NULL;
	scanf("%d",&choice);
	switch(choice)
	{
		case 1:
			printf("--------------[录入信息]----------------\n");
			printf("请输入学生姓名,年龄,性别,电话:"); 
			fflush(stdin);//清空缓存区 
			scanf("%s%d%s%s",data.name,&data.age,data.sex,data.tel); 
			insertNodeByHead(list,data);//插入列表 
			break;
		case 2:
			printf("--------------[浏览信息]----------------\n"); 
			printList(list);//打印列表 
			break;
		case 3:
			printf("--------------[修改信息]----------------\n");
			break;
		case 4:
			printf("--------------[删除信息]----------------\n");
			printf("请输入你要删除的学生姓名:");
			scanf("%s",data.name);
			deleteAppoinNode(list,data.name); 
			break;
		case 5:
		    printf("--------------[查找信息]----------------\n");
		    printf("请输入你要查找学生的姓名:");
			scanf("%s",data.name);
			pMove = searchInfoByDate(list,data.name);
			if(pMove==NULL)
			{
				printf("未找到相关信息,无法删除\n");
				system("pause"); 
			 } 
			else
			{
			printf("%s\t%d\t%s\t%s\n");
			printf("%s\t%d\t%s\t%s\n",pMove->data.name,pMove->data.age,pMove->data.sex,pMove->data.tel);
		    }
		    break; 
		case 6:
			printf("正常退出\n");
			system("pause");
			exit(0);
			break;
		default:
			printf("----------[输入错误,重新输入]------------");
			system("pause");
			break;
	}
	writeInfoToFile(list,"1.txt");
} 

主函数

int main (void)
{
	readInfoFromFile(list,"1.txt");
	while(1)
	{
		menu();
		keyDown();
		system("pause");//防止闪屏 
		system("cls");//清屏  
	}
	
	
   system("pause");	
   return 0;	
} 

链表(附录)

struct student
{
	char name[20];
	int age;
	char sex[5];
	char tel[20];
};
//结构分结构去写
//某一数据结构去实现相应的功能时,单独去设计此数据结构
struct Node//链表 
{
	//int date;
	struct student date;
	struct Node* next;
 };
 struct Node* createList()//创建一个链表 
 {
 	//结构体变量表示表头
	//指针--->变量  动态内存申请 
 	struct Node* headNode=(struct Node*)malloc(sizeof(struct Node));//指针变成结构体变量,申请动态内存
	headNode->next=NULL;//表头差异化处理 (数据域date不做初始化) 
	return headNode; 
  } 
  struct Node* createNode(struct student date)//创建节点
  {
  	struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
	newNode->date=date;
	newNode->next=NULL;
	return newNode; 
   } 
//插入节点
void insertNodeByHead(struct Node* headNode,struct student date)//插入的链表是以headNode为头的链表,插入的数据为date
{
	struct Node* newNode = createNode(date);//第一:创建插入的节点,调用创建节点的子函数
	//表头法插入
	newNode->next = headNode->next;
	headNode->next=newNode; 
 } 
 //删除指定位置的节点
 void deleteAppoinNode(struct Node* headNode,char *name)
 {
 	struct Node* posNode =headNode->next;//指定位置 
	struct Node* posFrontNode = headNode;//指定位置的前面
	if(posNode==NULL)
	{
		printf("数据为空,无法删除\n");
		return; 
	}
	//姓名是字符串,字符串的比较:strcpm 
	while(strcmp(posNode->date.name,name))
	{
		posFrontNode = posNode;
		posNode = posFrontNode->next;
		if(posNode==NULL)
		{
			printf("未找到指定位置,无法删除\n");
			return;
		 } 
		posFrontNode->next = posNode->next;
		free(posNode); 
	 } 
  } 
//查找功能
struct Node* searchInfoByDate(struct Node* headNode,char *name)
{
	struct Node* pMove=headNode->next;
	if(pMove == NULL)
	{
		return NULL;
	}
	while(strcmp(pMove->date.name,name))
	{
		pMove=pMove->next;
	}
	return pMove;
} 
//链表的存储
//文件的读操作
void readInfoFromFile(struct Node* headNode,char *fileName)
{
	//1.打开文件
	FILE *fp;
	struct student data;
	if(fp==NULL)
	{
		fp=fopen(fileName,"w+");
	}
	fp = fopen(fileName,"r");
	//2.读文件 
	while(fscanf(fp,"%s\t%d\t%s\t%s\n",data.name,data.age,data.sex,data.tel) != EOF)
	{
	insertNodeByHead(headNode,data);	
	}
	//3.关闭文件 
	fclose(fp);
 } 
//文件的写操作
 void writeInfoToFile(struct Node* headNode,char *fileName)
 {
 	FILE *fp;
	fp = fopen(fileName,"w");
	if(fp==NULL)
	{
		printf("文件打开失败");
		return; 
	}
	struct Node* pMove = headNode->next;
	while(pMove)
	{
		fprintf(fp,"%s\t%d\t%s\t%s\n",pMove->date.name,pMove->date.age,pMove->date.sex,pMove->date.tel);
		pMove=pMove->next;
	}
	fclose(fp);	
 }
//打印链表
void printList(struct Node* headNode)
{
	struct Node* pMove=headNode->next;
	//涉及到数据的处理
	printf("姓名\t年龄\t性别\t电话\n"); 
	while(pMove)
	{
		printf("%s\t%d\t%s\t%s\n",pMove->date.name,pMove->date.age,pMove->date.sex,pMove->date.tel);
		pMove = pMove->next; 
	}
	printf("\n");
发布了7 篇原创文章 · 获赞 3 · 访问量 82

猜你喜欢

转载自blog.csdn.net/qq_42724864/article/details/104191977