C小项目 —— 学生信息管理系统

C小项目 —— 学生信息管理系统

实现功能:
1. 录入学生信息
2. 显示所有学生信息
3. 按学号查询学生信息
4. 按姓名查询学生信息(支持模糊查询)
5. 按年龄查询学生信息
6. 修改学生信息
7. 删除学生信息
8. 保存学生信息到文件
9. 从文件载入学生信息
10. 退出系统
        使用链表的方式,实现细节很简单,就是链表的一些基本操作(创建,删除结点,增加结点,查找结点等);还有很多地方是可以拓展的(比如使用排序按学号顺序打印,或者按分数高低打印等);使用的是codeblock编译器。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef unsigned char  uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int   uint32_t;#define STUDENT_NUMBER  20    // 学号最长20
#define STUDENT_NAME    20    // 姓名最长20
#define STUDENT_SUBJECT 3     // 假设只有三科
#define FILENAME_SIZE   100   // 待保存的文件路径typedef struct student
{char num[STUDENT_NUMBER];       /* 学号 */char name[STUDENT_NAME];        /* 姓名 */char sex;                       /* 性别,'1'->男, '0'->女 */uint8_t age;                    /* 年龄 */uint8_t score[STUDENT_SUBJECT]; /* 三科的成绩 */uint16_t sum;                   /* 总成绩 */struct student *next;
} student_t;student_t *head = NULL;
static uint32_t count = 1; // 系统中学生个数void menu()
{printf("\n=========学生信息管理系统========\n");printf("1. 录入学生信息\n");printf("2. 显示所有学生信息\n");printf("3. 按学号查询学生信息\n");printf("4. 按姓名查询学生信息(支持模糊查询)\n");printf("5. 按年龄查询学生信息\n");printf("6. 修改学生信息\n");printf("7. 删除学生信息\n");printf("8. 保存学生信息到文件\n");printf("9. 从文件载入学生信息\n");printf("10. 退出系统\n");
}// 录入学生信息:初始化链表和加入链表的过程
void create(void)
{int i, flag = 0;char tmp[10];student_t *point, *q;while(1){if(1 != count){printf("是否继续录入(y/n):");gets(tmp);if(strlen(tmp) > 10){break;}if(strcmp(tmp, "n") == 0){break;}}point = (student_t *)malloc(sizeof(student_t));printf("\n====请输入第%d个学生信息====\n", count);printf("学号:");gets(point->num);q = head;while(NULL != q){if(atoi(q->num) == atoi(point->num)){flag = 1;printf("学号输入重复或者不合格,请重新输入...\n");break;}q = q->next;}if(1 == flag){continue;}printf("姓名:");gets(point->name);printf("性别,('1'->男, '0'->女):");point->sex = getchar();getchar();printf("年龄:");gets(tmp);point->age = atoi(tmp);printf("三门课程的成绩:\n");point->sum = 0;for(i = 0; i < STUDENT_SUBJECT; ++i){printf("第%d个成绩:", i + 1);gets(tmp);point->score[i] = atoi(tmp);point->sum += point->score[i];}printf("总成绩:%d\n", point->sum);point->next = head; // 核心代码就这两句head = point;count++;}printf("信息录入完毕,按任意键继续……");getch();
}// 显示所有学生的信息:遍历链表打印输出的过程
void display_all(void)
{student_t *point = head;printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\n");while(NULL != point){if(0 == point->age){point = point->next;continue;}printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n", point->num, point->name, point->sex == '1' ? "男" : "女", point->age, *(point->score), *(point->score + 1), *(point->score + 2), point->sum);point = point->next;}printf("信息显示完毕,按任意键继续……");getch();
}// 通过学号查找:唯一性
void search_on_number(void)
{student_t *point = head;char tmp[STUDENT_NUMBER];uint8_t flag = 0;printf("请输入学号:");gets(tmp);printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\n");while(NULL != point){if(strcmp(tmp, point->num) == 0){flag = 1;printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n", point->num, point->name, point->sex == '1' ? "男" : "女", point->age, *(point->score), *(point->score + 1), *(point->score + 2), point->sum);}point = point->next;}if(0 == flag){printf("\n未找到学号是%s的学生,按任意键继续……", tmp);}else{printf("\n显示完毕,按任意键继续……");}getch();
}// 通过名字查找:不唯一
void search_on_name(void)
{student_t *point = head;char tmp[STUDENT_NAME];uint8_t flag = 0;printf("请输入姓名:");gets(tmp);printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\n");while(NULL != point){if(strstr(point->name, tmp)){flag = 1;printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n", point->num, point->name, point->sex == '1' ? "男" : "女", point->age, *(point->score), *(point->score + 1), *(point->score + 2), point->sum);}point = point->next;}if(0 == flag){printf("\n未找到学号是%s的学生,按任意键继续……", tmp);}else{printf("\n显示完毕,按任意键继续……");}getch();
}// 通过年龄查找:不唯一
void search_on_age(void)
{student_t *point = head;char tmp[30];uint8_t flag = 0;printf("请输入年龄:");gets(tmp);printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\n");while(NULL != point){if(atoi(tmp) == point->age){flag = 1;printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n", point->num, point->name, point->sex == '1' ? "男" : "女", point->age, *(point->score), *(point->score + 1), *(point->score + 2), point->sum);}point = point->next;}if(flag == 0){printf("\n未找到年龄是%s的学生,按任意键继续……", tmp);}else{printf("\n显示完毕,按任意键继续……");}getch();
}// 修改指定学号的学生信息
void modify(void)
{student_t *point = head;char tmp[STUDENT_NUMBER];uint8_t flag = 0, j;char a;printf("请输入学号:"); // 学号是唯一的gets(tmp);while(point != NULL){if(strcmp(tmp, point->num) == 0){flag = 1;printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\n");printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n", point->num, point->name, point->sex == '1' ? "男" : "女", point->age, *(point->score), *(point->score + 1), *(point->score + 2), point->sum);printf("\n====请输入新信息====\n");// 学号唯一不做修改,别的都可以修改printf("姓名:");gets(tmp);if(strcmp(tmp, "") != 0){strcpy(point->name, tmp);}printf("性别,'1'->男, '0'->女:");a = getchar();if('\n' != a){point->sex = a;}else{point->sex = '1'; // 默认男生}printf("年龄:");gets(tmp);if(strcmp(tmp, "") != 0){point->age = atoi(tmp);}else{point->age = 20; // 默认就20岁了}printf("三门课程的成绩:\n");point->sum = 0;for(j = 0; j < STUDENT_SUBJECT; ++j){printf("第%d科成绩:", j + 1);gets(tmp);if(strcmp(tmp, "") != 0){point->score[j] = atoi(tmp);}point->sum += point->score[j];}printf("总成绩:%d\n", point->sum);}point = point->next;}if(0 == flag){printf("\n未找到%s!按任意键继续……", tmp);}else{printf("\n修改完毕,按任意键继续……");}getch();
}// 删除指定学生的信息:删除某个链表结点
void delete(void)
{student_t *point = head, *back;char tmp[STUDENT_NUMBER];uint8_t flag = 0, j;char a;printf("请输入学号:"); // 学号是唯一的gets(tmp);while(1){if(NULL == point->next){break;}if(atoi(tmp) == atoi(point->num)){flag = 1;head = point->next;free(point);count--;break;}back = point;point = point->next;if(atoi(tmp) == atoi(point->num)){flag = 1;back->next = point->next;free(point);count--;break;}}if(0 == flag){printf("\n未找到%s!按任意键继续……", tmp);}else{printf("\n修改完毕,按任意键继续……");}getch();
}// 保存到指定路径
void save(void)
{FILE *fp;student_t *point = head;char filename[FILENAME_SIZE] = {"d://qq.dat"};printf("请输入文件名如%s:", filename);gets(filename);while(strcmp(filename , "") == 0){printf("文件名不能为空,请重新输入:");gets(filename);}if((fp = fopen(filename, "wb")) == NULL){printf("文件打开失败!\n按任意键继续……");getch();return;}printf("正在保存信息,请耐心等待……\n");count = 0;while(NULL != point){count++;fwrite(point, sizeof(student_t), 1, fp);point = point->next;}fclose(fp);printf("信息保存成功,按任意键继续……");getch();
}// 从指定文件读取学生的信息到链表
void load(void)
{FILE *fp;student_t *point, *q;char filename[FILENAME_SIZE] = {"d://qq.dat"};printf("请输入文件名如%s:", filename);gets(filename);while(strcmp(filename , "") == 0){printf("文件名不能为空,请重新输入:");gets(filename);}if((fp = fopen(filename, "rb")) == NULL){printf("文件打开失败!\n按任意键继续……");getch();return;}printf("正在从文件载入信息,请耐心等待……\n");point = (student_t *)malloc(sizeof(student_t));head = point;count = 0;while(!feof(fp)){count++;fread(point, sizeof(struct student), 1, fp);point->next = (student_t *)malloc(sizeof(student_t));q = point;point = point->next;}q->next = NULL;fclose(fp);printf("学生信息载入成功,按任意键继续……");getch();
}// 退出系统
void quit(void)
{char c;printf("你真的要退出系统吗?(Y/N)");c = getchar();if('Y' == c || 'y' == c){printf("系统退出成功...\n");exit(0);}
}int main(void)
{uint8_t value;char choice[3];while(1){system("cls");menu();do{printf("请输入功能键:");gets(choice);value = atoi(choice);}while((value > 12) || (value < 0));switch(value){case 1:create();break;case 2:display_all();break;case 3:search_on_number();break;case 4:search_on_name();break;case 5:search_on_age();break;case 6:modify();break;case 7:delete();break;case 8:save();break;case 9:load();break;case 10:quit();break;default:break;}}return 0;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拆解1968年的美国军用电脑,真的怀疑是“穿越”啊!

来源&#xff1a;数码之家文 | 禅哥这台机器在本人的eBay收藏夹里呆了很久&#xff0c;某日无意间扫了一眼收藏夹&#xff0c;突然发现卖家大降价&#xff0c;只要15刀&#xff0c;还有best offer选项。15刀你买不了吃亏&#xff0c;15刀你买不了上当。事不宜迟果断下手。根据非…

ZJOI2018 Round2 游记

day0 高铁上颓了一部电影,然后闭上眼睛就到了 醒来之后发现被绑了艹,袖子被打了个结,搞了 \(20\) 分钟才解开,真想把绑我的人吊起来 \(xxx\) 公交车上碰到一位长者,被教育了一顿 长者:"你们大学生呐,戴着一副眼镜,肯定不是读书读出来的,玩游戏玩多了吧?" 我:".…

暂无标题

最近感觉好无聊&#xff0c;天天堕落&#xff0c;没事可干。上网也感觉越来越无聊了&#xff0c;除了聊天还是聊天&#xff0c;根本就没有什么事干&#xff0c;时间就这么一点一点的过去。大学有所谓的真感情吗&#xff1f;感觉有又感觉没有&#xff0c;没有的人实在是太多了&a…

使用PWM实现语音播放

本文转自ARM中文社区&#xff0c;作者&#xff1a;Xiaoya链接&#xff1a;https://community.arm.com/cn/b/blog/posts/nucleof429-2-pwm事实上大部分MCU都可以实现语音播放下面是一段音频数据的波形局部放大图&#xff1a;以一定的速度采样&#xff08;ADC&#xff09;这些波形…

C小项目 —— 学生选课系统

C小项目 —— 学生选课系统#include<stdio.h> #include<windows.h> #include<stdlib.h> #include<conio.h>typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t;#define CLASS_CLS system("cl…

物流行业应用虚拟化解决方案

物流行业应用虚拟化解决方案来源&#xff1a;N-soft 51CTO提醒您&#xff0c;请勿滥发广告.cn 对物流企业来说&#xff0c;对外的货物流动增加了企业的利润&#xff0c;而对内的信息数据流动则是业务持续发展的基本保障。于是乎&#xff0c;架构自身内部远程应用接入系统…

为了杀蚊子,他用树莓派DIY了一把激光枪!

本文经AI新媒体量子位&#xff08;公众号ID&#xff1a;QbitAI&#xff09;授权转载&#xff0c;转载请联系出处。世人苦蚊子久矣。尤其在夏夜&#xff0c;耳边嗡嗡作响&#xff0c;甚至还得与其“挑灯夜战”个三百回合。为此&#xff0c;一个国外博士便DIY了一种高端的杀蚊方式…

Excel—数组

SUMPRODUCT&#xff08;数组求和函数&#xff09;和SUM是一样的&#xff0c;只不过数组写完公式后需要三键合一出结果&#xff08;ctrlshiftenter&#xff09;&#xff0c;用SUMPRODUCT写公式写完直接敲击enter就行了 函数语法&#xff1a;SUMPRODUCT&#xff08;第一个值&…

STM32f103 —— 内部flash读写

#ifndef _MCU_FLASH_H_ #define _MCU_FLASH_H_#include <stdint.h>// STM32f103C8T6 64KB FLASH&#xff0c;20KB RAM&#xff0c;1个扇区1KB,程序起始0x8000000 #define FLASH_START_ADDR ((uint32_t)0x8000000) #define FLASH_END_ADDR ((uint32_t)(0x8000000 …

java获取操作系统信息

Java代码 import java.util.Properties; Properties propsSystem.getProperties(); //获得系统属性集 String osName props.getProperty("os.name"); //操作系统名称 String osArch props.getProperty("os.arch"); //操作系统构架 String osVe…

memcpy执行效率测试,无效测试

#include <stdio.h> #include<time.h> #include<math.h> #include <unistd.h> clock_t start,stop; //clock_t是clock()函数返回的变量类型 double duration; //记录被测试函数运行时间&#xff0c;以秒为单位#define MAXK 1e7/*被测函数最大重复调用次…

第七章|7.3并发编程|协程

1、协程 5个任务实现并发&#xff0c;放到1个线程里边&#xff1b;单线程是无法实现并行的&#xff1b;并发是看起来任务是同时运行的就可以了&#xff0c;其本质来回切换并保存状态。 单线程实现并发&#xff0c;切换保存状态&#xff0c;协程要做的事情。 cpu正在运行一个任…

jQuery是什么,jQuery入门简介

|seektanjQuery是最近比较火的一个JavaScript库&#xff0c;从del.icio.us/上相关的收藏可见一斑。 到目前为之jQuery已经发布到1.2.1版本&#xff0c;而在这之前的一个星期他们刚发布1.2版本&#xff0c;看看他的各个版本的 发布时间 &#xff0c;不难发现他的飞速发展&#x…

STM32f103 —— timer

#ifndef _TIMER_H_ #define _TIMER_H_#include "stm32f10x.h" #include "type.h"// LED定时器&#xff0c;按键定时器&#xff0c;重发定时器 #define LED_TIMER TIM1 #define LED_TIMER_DIV 7200 #define LED_TIMER_PERIOD 2500#defin…

使用monkey命令来打开一个app

Knowin inSight10:/ # pm packge list adb shell monkey -p com.aispeech.player.eng -v 1

scp和sftp常用操作

文件异地直接复制&#xff1a; scp SCP的全称是secure copy (remote file copy program)&#xff0c;此命令是openssh-clients附带的,它的作用就是在机器之间实现拷贝&#xff0c;且机器之间的传输完全是加密的。 最简单的 scp 用法如下&#xff1a; [rootwww ~]# scp [-pr] [-…

大脑最佳用法

用计算机的模式来比喻大脑,那么应该是CPU内存. 但更多时候,我们将大脑当硬盘用. 大脑真正应该用于思考,记忆功能可以使用笔记本或数字工具来记录. 这是我学习时间管理的一个收获,希望时间管理理念能够在未来给我更多的帮助.转载于:https://blog.51cto.com/owen/165727

SM7250(高通5G)平台LCD bringup

写在前面的话高通平台显示这一块&#xff0c;自从去年开始&#xff0c;高通全面使用SMxxxx命名的芯片比如高端系列&#xff1a;SM8350(骁龙888)&#xff0c;SM8250(骁龙865)&#xff0c;SM8150(骁龙855)中端系列&#xff1a;SM7250&#xff08;骁龙765g&#xff09;&#xff0c…

网络管理人员的未来?

这是流传已久的一张带讽刺性的照片。一名网络专业的学生的未来难道真会如此&#xff1f;或者&#xff0c;是某些人理解错了这个专业的诸多特性&#xff1f;转载于:https://blog.51cto.com/zhangbikai/166694

python笔记-1(import导入、time/datetime/random/os/sys模块)

python笔记-6&#xff08;import导入、time/datetime/random/os/sys模块&#xff09; 一、了解模块导入的基本知识 此部分此处不展开细说import导入&#xff0c;仅写几个点目前的认知即可。其它内容待日后有深入理解了再来细说 1、import可以导入的两种不同的内容 1.1 *.py文件…