C语言链表小案例
来源:互联网 发布:双色球数据分布图 编辑:程序博客网 时间:2024/06/09 14:12
C语言学生管理系统(练手)
- main.c
#include <stdio.h>#include <stdlib.h>#include "studentclass.h"int main(){ //显示菜单 Student_menu(); int number_index = 0; while (1){ printf("\n==========================\n"); printf("Please enter the number:"); if (scanf("%d",&number_index) == 1){ printf("==========================\n"); //处理接收到的命令 switch(number_index){ case 1: //录入学生的信息 Insert_Student(); break; case 2: printf("\n==========================\n"); printf("please enter student id:"); scanf("%d",&number_index); printf("\n==========================\n"); //根据ID删除学生 Student_Head = Delete_Student_id(number_index); //显示操作是否成功 Show_Error_Success(Student_Head); //显示剩余学生的数量 Student_Length(); break; case 3: printf("\n==========================\n"); printf("please enter student id:"); scanf("%d",&number_index); printf("\n==========================\n"); //根据ID查找学生 Student_Head = Student_SearchId(number_index); if (Student_Head == NULL){ printf("\n==========================\n"); printf("= cannot not find student! \n"); printf("==========================\n"); }else{ printf("\n ==========================\n "); printf("= Student_no :%ld \n ",Student_Head->sno); printf("= Student_age :%d \n ",Student_Head->sage); printf("= Student_name :%s \n ",Student_Head->sname); printf("= Student_class :%s \n ",Student_Head->sclass); printf("==========================\n"); } break; case 4: //修改学生信息 printf("\n==========================\n"); printf("please enter student id:"); scanf("%d",&number_index); printf("\n==========================\n"); Student_Head = Update_Student_id(number_index); Show_Error_Success(Student_Head); break; case 5: //显示所有的学生 Student_All(); break; case 6: //显示菜单 Student_menu(); break; case 0: //退出程序 exit(0); break; } }else{ printf("System Error!"); exit(0); } } return 0;}
- studentclass.h
#ifndef STUDENTCLASS_INCLUDED#define STUDENTCLASS_INCLUDED#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_LENGTH 20struct student{ long int sno;//学号 int sage;//年龄 char sname[MAX_LENGTH];//姓名 char sclass[MAX_LENGTH];//班级 struct student * next;};typedef struct student Student;//创建头节点[全局变量]Student * Student_Head ;//功能展示//菜单void Student_menu();//录入学生信息Student getStudentInfo();//增void Insert_Student();//删void * Delete_Student_all();//清空所有节点Student * Delete_Student_id(long int sno);//改Student * Update_Student_id(long int sno);//查void Student_All();Student * Student_SearchId(long int sno);//统计数量int getStudentLength();void Student_Length();//操作成功失败友好提示void Show_Error_Success(void * str);#endif // STUDENTCLASS_INCLUDED
- studentclass.c
#include "studentclass.h"//功能实现//菜单void Student_menu(){ printf("==========================\n"); printf("|| Student Mangerment || \n"); printf("|| v 1.0 || \n"); printf("==========================\n"); printf("= 1.注册 = \n"); printf("= 2.删除 = \n"); printf("= 3.查找 = \n"); printf("= 4.修改 = \n"); printf("= 5.显示 = \n"); printf("= 6.菜单 = \n"); printf("= 7.清空 = \n"); printf("= 0.退出 = \n"); printf("==========================\n");}//录入学生的信息Student getStudentInfo(){ Student stu ; //清空键缓冲区[Linux] setbuf(stdin,NULL); printf("\n==========================\n"); printf("please enter student no:"); scanf("%ld",&stu.sno); printf("please enter student age:"); scanf("%d",&stu.sage); getchar();//解决换行符 printf("please enter student name:"); gets(stu.sname); printf("please enter student class:"); gets(stu.sclass); printf("==========================\n"); setbuf(stdin,NULL); return stu;}//添加学生void Insert_Student(){ //录入学生的信息 Student stu = getStudentInfo(); //判断表头是否为空 if (Student_Head == NULL){ //创建节点 Student * temp = (Student *)malloc(sizeof(Student)); if (temp == NULL){ printf("application error!\n"); return ; } temp->sno = stu.sno; temp->sage = stu.sage; strcpy(temp->sname,stu.sname); strcpy(temp->sclass,stu.sclass); temp->next = NULL; Student_Head = temp; } else{ Student * temp = NULL; for (temp = Student_Head;temp->next != NULL;temp = temp->next); Student * current = (Student *)malloc(sizeof(Student)); if (current == NULL){ printf("application error!\n"); return ; } current->sno = stu.sno; current->sage = stu.sage; strcpy(current->sname,stu.sname); strcpy(current->sclass,stu.sclass); current->next = NULL; temp->next = current; }}//显示所有的学生void Student_All(){ Student * temp = Student_Head; for (;temp != NULL;temp = temp->next){ printf("\n ==========================\n "); printf("= Student_no :%ld \n ",temp->sno); printf("= Student_age :%d \n ",temp->sage); printf("= Student_name :%s \n ",temp->sname); printf("= Student_class :%s \n ",temp->sclass); printf("==========================\n"); }}//根据ID查询学生Student * Student_SearchId(long int sno){ Student * temp = Student_Head; for (;temp != NULL;temp = temp->next){ if (temp->sno == sno){ return temp; } } return NULL;}//删除所有的学生void * Delete_Student_all(){ Student * temp = Student_Head; Student * current = NULL; while (temp->next != NULL){ current = temp->next; temp->next = current->next; free(current); } free(Student_Head); Student_Head = NULL; return NULL;}//根据学号删除学生Student * Delete_Student_id(long int sno){ Student * temp = Student_Head; Student * current = NULL; int Flag = 0; for (;temp != NULL;temp = temp->next){ if (temp->sno == sno){ Flag = 1; break; } current = temp; } if (!Flag){ printf("connot not find student id\n"); return NULL; } //判断是否未头节点 if (temp == Student_Head){ Student_Head = temp->next; free(temp); }else{ current->next = temp->next; free(temp); } return Student_Head;}//修改学生的信息Student * Update_Student_id(long int sno){ Student * temp = Student_Head; int Flag = 0; for (;temp != NULL;temp = temp->next){ if (temp->sno == sno){ Flag = 1; break; } } if (!Flag){ printf("connot not find !\n"); return NULL; } Student stu = getStudentInfo(); temp->sno = stu.sno; temp->sage = stu.sage; strcpy(temp->sname,stu.sname); strcpy(temp->sclass,stu.sclass); return Student_Head;}//统计学生的人数int getStudentLength(){ Student * temp = Student_Head; int index = 0; for (;temp != NULL;temp = temp->next){ index++; } return index;}//友好操作提示void Show_Error_Success(void * str){ if (str == NULL){ printf("\n==========================\n"); printf("= error opertion! \n"); printf("==========================\n"); }else{ printf("\n==========================\n"); printf("= successful opertion! \n"); printf("==========================\n"); }}//显示学生的数量void Student_Length(){ printf("\n==========================\n"); printf("= Student_Length -> [%d] \n",getStudentLength()); printf("==========================\n");}
0 0
- C语言链表小案例
- 经典c语言案例
- c语言案例
- c语言经典案例
- c语言经典案例
- C语言案例
- C语言经典案例
- C语言--Set 案例
- C语言程序案例
- C语言-字符串函数案例
- C语言低级错误案例
- c语言基础案例之指针
- C语言函数指针数组简单案例
- C语言的一些经典案例
- c语言基础 之字符串案例
- 拿来主义:C语言动态申请内存案例
- linux下c语言多线程编程案例
- c语言 malloc小案例1
- 百度地图开发的坑
- 恢复损坏的表决磁盘(votedisk)和OCR
- Linux设备驱动程序--学习笔记(1)
- Android进阶系列7—重说View的工作流程三部曲
- Another unnamed CacheManager already exists in the same VM
- C语言链表小案例
- mipi差分信号原理
- 1.12编程基础之函数与过程抽象 01:简单算术表达式求值
- JAVA多线程实现的三种方式
- 开关机
- SSM框架——使用MyBatis Generator自动创建代码
- 文本两端对齐方式
- bzoj1087
- POJ Expanding Rods 1905 (二分)