C++中项目实战---用C语言来实现
1】学生管理系统
1 /*C来实现学生管理系统*/ 2 /***********************************************************/ 3 //该系统实现了那些操作 4 //1、菜单、增、删、改、查、打印 5 //2、检查是否已经存在的学号 6 //3、实现二级菜单 选择性修改等操作 7 /***********************************************************/ 8 #define _CRT_SECURE_NO_WARNINGS 9 #include<stdio.h> 10 #include<string.h> 11 #include<stdlib.h> 12 struct SUser{//结构体 每个接头体保存三个数据 13 int m_Num; //学号数据 14 char m_Name[20]; //姓名数据 15 float m_Math; //成绩数据 16 }; 17 SUser g_user[10000] ;//可以实现保存10000条数据记录 18 void Print(){ 19 printf("\n==========================\n"); 20 printf("学号\t姓名\t成绩\n");//其中\t挺好用的 21 int i = 0,num=0; 22 while (g_user[i].m_Num){//0.1f只取一位 23 if (g_user[i].m_Num > 0){//将-1屏蔽 不打印 =0 停止退出循环 24 printf("%d\t%s\t%0.1f\n", g_user[i].m_Num, &g_user[i].m_Name, g_user[i].m_Math); 25 //这里注意,数组加引用就有问题了,数组第一个代表的是指针 26 //所以此处用g_user[i].m_Math 而不能用&g_user[i].m_Math 27 ++num; 28 } 29 ++i;//这里很重要,必须是先+后赋值 30 } 31 printf("当前共用: %d 条记录\n", num); 32 printf("==========================\n\n"); 33 } 34 void Add(){//增 35 //一共可以录入[10000]条数据,即为截止条件 36 int i = 0;//结构体中学号录入指针+1 37 int j = 0;//保持i的不动,即将g_user[i].m_Num作为被比较对象 38 int com_Num;//定义一个临时变量来检查是否有已存在的学号,输入时,将学号数据赋给该变量, 39 //然后再给g_user[i].m_Num,同所有g_user[i].m_Num中i之前数据比较 40 while (g_user[i].m_Num)//{//此处不能使g_user非零;应该是结构体中的某一个数据非零 41 //想想g_user结构体中的名字怎么可能=0? 42 i++;//先取值用,后++ 从0开始赋值 43 printf("请输入学号: "); 44 scanf_s("%d", &com_Num);//scanf_s("%s"不能添加其他的\n之类的 否则不现实 45 g_user[i].m_Num = com_Num; 46 j = i; 47 while (g_user[i].m_Num){//学号非空来检查是否重定义 48 --j; 49 if (g_user[j].m_Num == com_Num){ 50 printf("学号已存在,请重新是输入\n"); 51 printf("请输入学号: "); 52 scanf_s("%d", &com_Num); 53 j = i;//输入的数据还需要在检查一次 54 } 55 if (j < 0){ break; } 56 } 57 printf("请输入姓名: "); 58 scanf_s("%s", g_user[i].m_Name,sizeof(g_user[i].m_Name)); 59 //scanf_s("%s", g_user[i].m_Name) 直接这样,无法输入/崩溃 60 printf("请录入数学成绩: "); 61 scanf_s("%f", &g_user[i].m_Math); 62 Print(); 63 } 64 void Delete(){//删 65 printf("\n请输入需要删除的学号序列号: "); 66 int i = 0; 67 int s_num = 0;//需要中间变量存储输入值,将和g_user[i].m_Num 68 int flag = 0;//设置标志位 作为判断是否找到被删除的序号 69 scanf_s("%d", &s_num); 70 while (g_user[i].m_Num){ 71 if (g_user[i].m_Num == s_num){ 72 g_user[i].m_Num = -1;//为什么不填0呢?填0代表结束了,后续的数据无法使用。 73 //-1只是代表不打,但不会结束跳出循环;0会结束,跳出循环 74 flag = 1; 75 break; 76 } 77 ++i;//往下找的同时,将s_num同g_user[i].m_Num对比; 78 } 79 if (flag == 0){//如果没找到需要删除的学号的序号 80 puts("\n\n 并未找到您所需要删除的学号 \n\n"); 81 } 82 else{//找到了 83 Print(); 84 } 85 } 86 void Modify(){//改 87 int i = 0,s_num=0,modify_i=0; 88 printf("\n请输入您需要修改的记录的学号: "); 89 scanf_s("%d", &s_num); 90 while (g_user[i].m_Num){//内容非空的情况下,进行学号数据的对比 91 if (g_user[i].m_Num == s_num){ 92 printf("\n\n (1)选择修改学号\n\n\n (2)选择修改姓名\n\n\n (3)选择修改成绩\n\n"); 93 printf("\n请选择需要修改的内容的选项: "); 94 scanf_s("%d", &modify_i); 95 do{ 96 switch (modify_i){ 97 case 1: 98 printf("请重新修改学号: "); 99 scanf_s("%d", &g_user[i].m_Num); 100 break; 101 case 2: 102 printf("请重新修改姓名: "); 103 scanf_s("%s", g_user[i].m_Name, sizeof(g_user[i].m_Name)); 104 break; 105 case 3: 106 printf("请重新修改成绩: "); 107 scanf_s("%f", &g_user[i].m_Math); 108 break; 109 } 110 printf("\n请问您还需要修改吗?继续,请上述序号;停止,选择按键0回车\n"); 111 printf("\n请选择: "); 112 scanf_s("%d", &modify_i); 113 } while (modify_i); 114 break; 115 } 116 ++i;//先增后赋值 117 } 118 if (!g_user[i].m_Num){//!g_user[i].m_Num即g_user[i].m_Num==0,即搜索到最后没有相同的内容 119 puts("\n未找到您需要修改记录的序号!"); 120 return; 121 } 122 Print(); 123 } 124 void Find(){//查 125 int i = 0, s_num = 0; 126 printf("\n请输入需要查找的学号信息: "); 127 scanf_s("%d", &s_num); 128 while (g_user[i].m_Num){ 129 if (g_user[i].m_Num == s_num){ 130 printf("\n学号\t姓名\t成绩\n"); 131 printf("%d\t%s\t%0.1f\n", g_user[i].m_Num,g_user[i].m_Name,g_user[i].m_Math); 132 system("pause"); 133 break; 134 } 135 ++i; 136 } 137 if (!g_user[i].m_Num){ 138 puts("\n不存在您查找的内容\n"); 139 return; 140 } 141 } 142 int Menu(){//菜单 143 puts("1】浏览所有信息");//puts专门输出字符 144 puts("2】添加信息"); 145 puts("3】删除信息"); 146 puts("4】修改信息"); 147 puts("5】查找信息"); 148 puts("0】退出"); 149 printf("请选择: "); 150 int i = 0; 151 scanf_s("%d", &i); 152 switch (i){ 153 case 1: 154 Print(); 155 break; 156 case 2: 157 Add(); 158 break; 159 case 3: 160 Delete(); 161 break; 162 case 4: 163 Modify(); 164 case 5: 165 Find(); 166 } 167 return i; 168 } 169 int main(){ 170 while (Menu()){//无限循环 171 }; 172 return 0; 173 } 174