cjhd

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  

 

分类:

技术点:

相关文章: