吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 19512|回复: 43
收起左侧

[C&C++ 原创] 【C语言程序】学生成绩管理系统

  [复制链接]
bfgjjt 发表于 2018-7-10 11:41
本帖最后由 bfgjjt 于 2018-7-10 16:24 编辑

有许多朋友要求出一个比较难的程序,今天给大家分享一个C语言环境下开发的学生成绩管理系统
这个系统原理很简单:成绩的录入,输出,修改,排序,删除等等。
主要目的是帮大家温习C语言的使用。
【软件获取】请查看附件
【源代码】

--------------------------------------------------------------------------------------------------------------------
[C] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
#include<string.h>
#define LEN sizeof(struct student)
#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf\n"
#define DATA stu.num,stu.name,stu.elec,stu.expe,stu.requ,stu.sum
//仅供学习使用,起切勿用作商业用途!
float Felec,Fexpe,Frequ;
struct student/*定义学生成绩结构体*/
{
        int num;/*学号*/
        char name[15];/*姓名*/
        double elec;/*选修课*/
        double expe;/*实验课*/
        double requ;/*必修课*/
        double sum;/*总分*/
};
struct student stu[50];/*定义结构体数组*/
void in();/*录入学生成绩信息*/
void show();/*显示学生信息*/
void order();/*按总分排序*/
void del();/*删除学生成绩信息*/
void modify();/*修改学生成绩信息*/
void menu();/*主菜单*/
void insert();/*插入学生信息*/
void total();/*计算总人数*/
void search();/*查找学生信息*/
int main()/*主函数*/
{
        int n;
        menu();
        scanf("%d",&n);/*输入选择功能的编号*/
        while(n)
        {
                switch(n)
                {
                case 1:
                        in();
                        break;
                case 2:
                        search();
                        break;
                case 3:
                        del();
                        break;
                case 4:
                        modify();
                        break;
                case 5:
                        insert();
                        break;
                case 6:
                        order();
                        break;
                case 7:
                        total();
                        break;
                default:break;
                }
                getch();
                menu();/*执行完功能再次显示菜单界面*/
                scanf("%d",&n);
        }
}
 
 
void in()/*录入学生信息*/
{
        int i,m=0;/*m是记录的条数*/
        char ch[2];
        FILE *fp;/*定义文件指针*/
        if((fp=fopen("data","ab+"))==NULL)/*打开指定文件*/
        {
                printf("can not open\n");
                return;
        }
        while(!feof(fp))
        {
                if(fread(&stu[m] ,LEN,1,fp)==1)
                        m++;/*统计当前记录条数*/
        }
        fclose(fp);
        if(m==0)
                printf("No record!\n");
        else
        {
                system("cls");
                show();/*调用show函数,显示原有信息*/
        }
        if((fp=fopen("data","wb"))==NULL)
        {
                printf("can not open\n");
                return;
        }
        for(i=0;i<m;i++)
                fwrite(&stu ,LEN,1,fp);/*向指定的磁盘文件写入信息*/
        printf("please input(y/n):");
        scanf("%s",ch);
        if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
        {
                printf("please input per centum:");
                printf("\nelective:");
                scanf("%f",&Felec);
                printf("\nexperiment:");
                scanf("%f",&Fexpe);
                printf("\nrequired course:");
                scanf("%f",&Frequ);
        }
        while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息*/
        {
                printf("number:");
                scanf("%d",&stu[m].num);/*输入学生学号*/
                for(i=0;i<m;i++)
                        if(stu.num==stu[m].num)
                        {
                                printf("the number is existing,press any to continue!");
                                getch();
                                fclose(fp);
                                return;
                        }
                        printf("name:");
                        scanf("%s",stu[m].name);/*输入学生姓名*/
                        printf("elective:");
                        scanf("%lf",&stu[m].elec);/*输入选修课成绩*/
                        printf("experiment:");
                        scanf("%lf",&stu[m].expe);/*输入实验课成绩*/
                        printf("required course:");
                        scanf("%lf",&stu[m].requ);/*输入必修课成绩*/
                        stu[m].sum=stu[m].elec*Felec+stu[m].expe*Fexpe+stu[m].requ*Frequ;/*计算出总成绩*/
                        if(fwrite(&stu[m],LEN,1,fp)!=1)/*将新录入的信息写入指定的磁盘文件*/
                        {
                                printf("can not save!");
                                getch();
                        }
                        else
                        {
                                printf("%s saved!\n",stu[m].name);
                                m++;
                        }
                        printf("continue?(y/n):");/*询问是否继续*/
                        scanf("%s",ch);
        }
        fclose(fp);
        printf("OK!\n");
}
 
 
void show()
{
        FILE *fp;
        int i,m=0;
        fp=fopen("data","ab+");
        while(!feof(fp))
        {
                if(fread(&stu[m] ,LEN,1,fp)==1)
                        m++;
        
        fclose(fp);
        printf("number  name           elective    experiment  required    sum\t\n");
        for(i=0;i<m;i++)
        {
                printf(FORMAT,DATA);/*将信息按指定格式打印*/
        }
}
 
 
void menu()/*自定义函数实现菜单功能*/
{
        system("cls");
        printf("\n\n\n\n\n");
        printf("\t\t|---------------------STUDENT-------------------|\n");
        printf("\t\t|\t 0. exit                                |\n");
        printf("\t\t|\t 1. input record                        |\n");
        printf("\t\t|\t 2. search record                       |\n");
        printf("\t\t|\t 3. delete record                       |\n");
        printf("\t\t|\t 4. modify record                       |\n");
        printf("\t\t|\t 5. insert record                       |\n");
        printf("\t\t|\t 6. order                               |\n");
        printf("\t\t|\t 7. number                              |\n");
        printf("\t\t|--------该程序由吾爱破解bfgjjt提供-------------|\n\n");
        printf("\t\t\tchoose(0-7):");
}
 
 
void order()/*自定义排序函数*/
{
        FILE *fp;
        struct student t;
        int i=0,j=0,m=0;
        if((fp=fopen("data","ab+"))==NULL)
        {
                printf("can not open!\n");
                return;
        }
        while(!feof(fp))
                if(fread(&stu[m] ,LEN,1,fp)==1)
                        m++;
                fclose(fp);
                if(m==0)
                {
                        printf("no record!\n");
                        return;
                }
                for(i=0;i<m-1;i++)
                        for(j=i+1;j<m;j++)/*双重循环实现成绩比较并交换*/
                                if(stu.sum<stu[j].sum)
                                {
                                        t=stu;
                                        stu=stu[j];
                                        stu[j]=t;
                                }
                                if((fp=fopen("data","wb"))==NULL)
                                {
                                        printf("can not open\n");
                                        return;
                                }
                                for(i=0;i<m;i++)/*将重新排好序的内容重新写入指定的磁盘文件中*/
                                        if(fwrite(&stu ,LEN,1,fp)!=1)
                                        {
                                                printf("%s can not save!\n");
                                                getch();
                                        }
                                        fclose(fp);
                                        printf("save successfully\n");
}
void del()/*自定义删除函数*/
{
        FILE *fp;
        int snum,i,j,m=0;
        char ch[2];
        if((fp=fopen("data","ab+"))==NULL)
        {
                printf("can not open\n");
                return;
        }
        while(!feof(fp)) 
                if(fread(&stu[m],LEN,1,fp)==1)
                        m++;
                fclose(fp);
                if(m==0)
                {
                        printf("no record!\n");
                        return;
                }
                printf("please input the number:");
                scanf("%d",&snum);
                for(i=0;i<m;i++)
                        if(snum==stu.num)
                                break;
                 if(i==m)
                        {
                        printf("can not find");
                        getchar();
                        return;
                        }
                        printf("find the student,delete?(y/n)");
                        scanf("%s",ch);
                        if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/
                        {
                                for(j=i;j<m;j++)
                                        stu[j]=stu[j+1];/*将后一个记录移到前一个记录的位置*/
                                        m--;/*记录的总个数减1*/
                                        printf("delete successfully!\n");
                                }
                                if((fp=fopen("data","wb"))==NULL)
                                {
                                        printf("can not open\n");
                                        return;
                                }
                                for(j=0;j<m;j++)/*将更改后的记录重新写入指定的磁盘文件中*/
                                        if(fwrite(&stu[j] ,LEN,1,fp)!=1)
                                        {
                                                printf("can not save!\n");
                                                getch();
                                        }
                                        fclose(fp);
                                 
}
 
 
void search()/*自定义查找函数*/
{
        FILE *fp;
        int snum,i,m=0;
        char ch[2];
        if((fp=fopen("data","ab+"))==NULL)
        {
                printf("can not open\n");
                return;
        }
        while(!feof(fp))
                if(fread(&stu[m],LEN,1,fp)==1)
                        m++;
                fclose(fp);
                if(m==0)
                {
                        printf("no record!\n");
                        return;
                }
                printf("please input the number:");
                scanf("%d",&snum);
                for(i=0;i<m;i++)
                        if(snum==stu.num)/*查找输入的学号是否在记录中*/
                        {
                                printf("find the student,show?(y/n)");
                                scanf("%s",ch);
                                if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
                                {
                                        printf("number  name           elective    experiment  required    sum\t\n");
                                        printf(FORMAT,DATA);/*将查找出的结果按指定格式输出*/
                                        break;
                                }
                                else
                                        return;
                        }  
                        if(i==m)
                                printf("can not find the student!\n");/*未找到要查找的信息*/
}
 
 
void modify()/*自定义修改函数*/
{
        FILE *fp;
        int i,j,m=0,snum;
        if((fp=fopen("data","ab+"))==NULL)
        {
                printf("can not open\n");
                return;
        }
        while(!feof(fp)) 
                if(fread(&stu[m],LEN,1,fp)==1)
                        m++;
                if(m==0)
                {
                        printf("no record!\n");
                        fclose(fp);
                        return;
                }
                printf("please input the number of the student which do you want to modify!\n");
                scanf("%d",&snum);
                for(i=0;i<m;i++)
                        if(snum==stu.num)/*检索记录中是否有要修改的信息*/
                                break;
                        if(i<m)
                        {       
                                printf("find the student!you can modify!\n");
                                printf("please input per centum:");
                                printf("\nelective:");
                                scanf("%f",&Felec);
                                printf("\nexperiment:");
                                scanf("%f",&Fexpe);
                                printf("\nrequired course:");
                                scanf("%f",&Frequ);
                                printf("name:\n");
                                scanf("%s",stu.name);/*输入名字*/
                                printf("\nelective:");
                                scanf("%lf",&stu.elec);/*输入选修课成绩*/
                                printf("\nexperiment:");
                                scanf("%lf",&stu.expe);/*输入实验课成绩*/
                                printf("\nrequired course:");
                                scanf("%lf",&stu.requ);/*输入必修课成绩*/
                                stu.sum=stu.elec*Felec+stu.expe*Fexpe+stu.requ*Frequ;
                        }
                        else
                        {
                                printf("can not find!");
                                getchar();
                                return;
                        }
                        if((fp=fopen("data","wb"))==NULL)
                        {
                                printf("can not open\n");
                                return;
                        }
                        for(j=0;j<m;j++)/*将新修改的信息写入指定的磁盘文件中*/
                                if(fwrite(&stu[j] ,LEN,1,fp)!=1)
                                {
                                        printf("can not save!");
                                        getch();
                                }
                                fclose(fp);
}
 
 
void insert()/*自定义插入函数*/
{
        FILE *fp;
        int i,j,k,m=0,snum;
        if((fp=fopen("data","ab+"))==NULL)
        {
                printf("can not open\n");
                return;
        }
        while(!feof(fp)) 
                if(fread(&stu[m],LEN,1,fp)==1)
                        m++;
                if(m==0)
                {
                        printf("no record!\n");
                        fclose(fp);
                        return;
                }
                printf("please input position where do you want to insert!(input the number)\n");
                scanf("%d",&snum);/*输入要插入的位置*/
                for(i=0;i<m;i++)
                        if(snum==stu.num)
                                break;
                        for(j=m-1;j>i;j--)
                                stu[j+1]=stu[j];/*从最后一条记录开始均向后移一位*/
                        printf("now please input the new information.\n");
                        printf("number:");
                        scanf("%d",&stu[i+1].num);
                        for(k=0;k<m;k++)
                                if(stu[k].num==stu[i+1].num&&k!=i+1)
                                {
                                        printf("the number is existing,press any to continue!");
                                        getch();
                                        fclose(fp);
                                        return;
                                }
                                printf("please input per centum:");
                                printf("\nelective:");
                                scanf("%f",&Felec);
                                printf("\nexperiment:");
                                scanf("%f",&Fexpe);
                                printf("\nrequired course:");
                                scanf("%f",&Frequ);
                                printf("name:\n");
                                scanf("%s",stu[i+1].name);
                                printf("\nelective:");
                                scanf("%lf",&stu[i+1].elec);
                                printf("\nexperiment:");
                                scanf("%lf",&stu[i+1].expe);
                                printf("\nrequired course:");
                                scanf("%lf",&stu[i+1].requ);
                                stu[i+1].sum=stu[i+1].elec*Felec+stu[i+1].expe*Fexpe+stu[i+1].requ*Frequ;
                                if((fp=fopen("data","wb"))==NULL)
                                {
                                        printf("can not open\n");
                                        return;
                                }
                                for(k=0;k<=m;k++)
                                        if(fwrite(&stu[k] ,LEN,1,fp)!=1)/*将修改后的记录写入磁盘文件中*/
                                        {
                                                printf("can not save!");
                                                getch();
                                        }
                                        fclose(fp);
}
 
 
void total()
{
        FILE *fp;
        int m=0;
        if((fp=fopen("data","ab+"))==NULL)
        {        
                printf("can not open\n");
                return;
        }
        while(!feof(fp)) 
                if(fread(&stu[m],LEN,1,fp)==1)
                        m++;/*统计记录个数即学生个数*/
                if(m==0)
                {
                        printf("no record!\n");
                        fclose(fp);
                        return;
                }
                printf("the class are %d students!\n",m);/*将统计的个数输出*/
                fclose(fp);
}


主界面

主界面
成绩录入.jpg
排序.png
查询.png

student.zip

44.53 KB, 下载次数: 395, 下载积分: 吾爱币 -1 CB

程序

免费评分

参与人数 7吾爱币 +4 热心值 +7 收起 理由
风之神 + 1 + 1 用心讨论,共获提升!
Snihc1205 + 1 我很赞同!
路漫漫w + 1 + 1 热心回复!
Avgi + 1 + 1 热心回复!
yx0731 + 1 + 1 我很赞同!
Edgar123 + 1 谢谢@Thanks!
西瓜小刚 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

heang567 发表于 2018-10-20 18:26 来自手机
这个是课程设计的题目吧!
明月相照 发表于 2018-7-10 13:12
本帖最后由 明月相照 于 2018-7-10 13:15 编辑

记得当时也用C做过类似的,参考FOX的数据库的功能和菜单做个简单的,当时排除错误就记得是用时很久。叹......
对分检索算法和排序什么的,搞了好些天。
mengsiyiren 发表于 2018-7-10 11:58
SPDPK_蛛侍 发表于 2018-7-10 12:02 来自手机
好厉害。。
苏苏啊 发表于 2018-7-10 12:10
不错 课程设计可以复用下
西瓜小刚 发表于 2018-7-10 12:14
谢谢 分享 值得学习
MYLQG2ZHX 发表于 2018-7-10 12:14
谢谢分享
Edgar123 发表于 2018-7-10 12:17
观摩学习.
头像被屏蔽
csa 发表于 2018-7-10 12:44
提示: 作者被禁止或删除 内容自动屏蔽
A羽飞 发表于 2018-7-10 12:50
666,我只会VBA
lanzhimimi 发表于 2018-7-10 13:03
太牛了。谢谢楼主分享代码  正想在复习一下C语言呢。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-8-15 06:09

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表