刘梦琦 2 years ago
commit d5e63262c0

@ -304,6 +304,20 @@ Step 2: 输入删除学号
Step 3: if 不成立则结束 else 删除
```
![](delete_data.svg)
刘梦琦
通过这次的实验项目,我深刻体会到团队合作的意义,每个人都有自己要完成的任务,在遇到问题时需要队员间的
相互帮助。首先,分配好每个人的任务,其次,在最初开始任务时,我们都比较手足无措,都有对任务的疑问和困惑,通过讨论怎样去做、怎样完成任务进而解决问题,我们对学生系统要实现的功能有了一定了解后,按照模板进行项目推进,最后,每个人都完成了画图和实现部分项目功能的任务。虽然我是项目组长,但是有很多不足和需要改进的地方,遇到问题时在队员的帮助之下完成了相应的任务。一个项目的完成离不开一个团队的团结协作,在进行项目时,需要反复的纠错和改进,从而不断地提升自我。这一次很好的团队体验,让我能够初步地体会到一个团队间的分工协作的重要性,在以后的工作中,必然少不了团队合作,这次项目的完成为以后打下了基础,如果我们再遇到项目时,我们能够较好地知道怎样完成项目。
### sort_data
```
Step 1: for 0 to num_part-1 排序
Step 2: 按学生学号从小到大排序
```
![](sort_data.svg)
### make_chart
```
Step 1: Step 1: for 0 to num_part-1 图表
Step 2: 以图表方式显示库存记录
```
![](make_chart.svg)
名字:刘梦琦
总结:通过这次的实验项目,我深刻体会到团队合作的意义,每个人都有自己要完成的任务,在遇到问题时需要队员间的相互帮助。首先,分配好每个人的任务,其次,在最初开始任务时,我们都比较手足无措,都有对任务的疑问和困惑,通过讨论怎样去做、怎样完成任务进而解决问题,我们对学生系统要实现的功能有了一定了解后,按照模板进行项目推进,最后,每个人都完成了画图和实现部分项目功能的任务。虽然我是项目组长,但是有很多不足和需要改进的地方,遇到问题时在队员的帮助之下完成了相应的任务。一个项目的完成离不开一个团队的团结协作,在进行项目时,需要反复的纠错和改进,从而不断地提升自我。这一次很好的团队体验,让我能够初步地体会到一个团队间的分工协作的重要性,在以后的工作中,必然少不了团队合作,这次项目的完成为以后打下了基础,如果我们再遇到项目时,我们能够较好地知道怎样完成项目。
名字:刘鑫成
总结:本次的程序设计活动,让我体验到了公司实际开发项目中的紧张感,以及程序开发成功的自豪感,让我认识到了团队合作、成员分工以及项目领导者的重要性,让我受益匪浅

@ -1,4 +1,4 @@
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="386px" height="731px" viewBox="-0.5 -0.5 386 731" content="&lt;mxfile&gt;&lt;diagram id=&quot;5r2FhZIOgLJSjUQlOUcC&quot; name=&quot;Page-1&quot;&gt;5VhLc5swEP41umYAIQxH8KM9tDOZyaHJqaMaBdQKxMhybOfXVwJhHsJNZuKQyfRia1erx358u9IKwGVx/CJwlX/nKWHAc9IjgCvgeb4XqF+tODUKBKNGkQmaNiq3U9zRZ2KUjtHuaUp2A0PJOZO0Giq3vCzJVg50WAh+GJo9cjZctcIZsRR3W8xs7Q+ayrzRhsjp9F8JzfJ2ZdcxPQVujY1il+OUH3oquAZwKTiXTas4LgnT2LW4NOM2F3rPGxOklK8Z4DcDnjDbG9/MvuSpdZakyncjlrxUf0kuC6YkVzUbc21zcQdGteN7sTVWZhWJRUaMFTx7r1hDeEGkOCkTQRiW9Gk4OzbfLzvbdS6qhvFy2mPP8liRk0jyM8US284zpkilfT7kVJK7CtcuHBStp3B4IkKS47+RsH1sBwSGFCYqPN/Ih45jbkucvMev0Hk7LG7wMUyANhNcNBMVoO3yOgTJGkQQrBEIEYiRbsQrEAe1ZgOShQXL/Mzw3VcyI7gGM8KPYUZDgxE1FnNlCeetTivXxOleCU4rPGjhBrXi6tjvXJ2MdEWwopnAahcfBJIVNo0mCnUjWoI4BHBjYSpyXvza7+bJtxANogpN5dvFO+Vb76OiamETxZsrqtrFXyCKD5IQhKsJxowRUtenSjeV05gxwngmcKGwqYigandEjPtuu46XGPZIj6S9e16Lcf6QcYupPI7eKY97E1E6C+OiCcb5czEummRcGILYAesIRBGI/R4HFyDyQbSpObgBsQvWAQhdENuZ6pNRz3eGVwiEZrxCtNvtfYUHC1DlmxzCgBnNStXeKh9r2DQCVJVhsekoaJrq4YkgO/qMf9VT6UO04rSU9YZRAtBKz7WXfNchupOC/yFLzrjoqP5IGRuproA8RCPkJ44ZOAE8vAbwdrVz/98A74ZD4IM5gZ8orFWWUadb4umcEiUg8etGABLH+iSfPLkE0ZzJZepSoXBO6jJOIbzSCd066WYt7IfHfjgFj/teF82JE/AVxz4XMucZLzH7xnllsPhNpDwZ6ui4HlU8RyrrgufGh6GRdc3j3jjIiF3No4VTT+gR+A1l0KV7RR/olquvvmuY6W51autx3h9yPnRHH6vZlxnl9Z7gRhOda812onFQNBcna6JYCHzqmZnUe3nDCA7XGT8NvmQfDOxVo9lBx8Iz4FPEVGL3rNmYd2/DcP0X&lt;/diagram&gt;&lt;/mxfile&gt;">
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="386px" height="731px" viewBox="-0.5 -0.5 386 731" content="&lt;mxfile&gt;&lt;diagram id=&quot;5r2FhZIOgLJSjUQlOUcC&quot; name=&quot;Page-1&quot;&gt;5VhLc9sgEP41XDN6IaOj5Ed6aDuZyaHNqUMtYtEi48E4tvPrCxKyhFAaT+PIk+lJ7LKsdj99LKxAOC0PtwJvii88JwwEXn4A4QwEge9NAvXQmmOtgTGqFStBc2PUKu7pM2lWGu2O5mRrGUrOmaQbW7nk6zVZSkuHheB72+yRM/utG7wijuJ+iZmr/UZzWdRaBL1W/4nQVdG82ffMTIkbY6PYFjjn+44qnINwKjiX9ag8TAnT4DW41OsWL8yeAhNkLc9ZENULnjDbmdxMXPLYJEtylbsR13ytHlkhS6YkXw3dF5oYtnwnlsaFcSqxWBFjFdYq7byzzAR5S3hJpDgqA0EYlvTJBh6b77c62bUpqoHJcjjjwMlYsZNI8iPHErvJM6ZIpXPeF1SS+w2uctorXp+JwxMRkhz+mmMzGxtSmF0RREbetxzzG+IUHX4h7+2w+PEoTAhdJvjwWlQI3ZTnCGRzkIRgDgGCIIV6kM5AGleaBcgmDizjMyPyz2RGfAlmoFGY0dDAosbkalXCe2vSKldx/K4ErxEetHADG3F26E7Ojkb6d7CSa4HVRGNtJGfb1JoE6UEyBSkC4cLBVBS8/LnbjlNvQ2jtKjhUbyfvVG+DkXbVxCVKcLVd1UTzClEikCGAZgOM6SOkrk8bPVQoYMYI4yuBS4XNhgiqoiOiP3fXTrzGsEd6IM3d81KMi2zGTYbqOHynOh4M7NL3YFwywLjoaoxLBhmHEEg9ME9AkoA06nBwApIIJIuKgwuQ+mAeA+SD1K1UH4x6kWdfISAc8QpxCrf9Cg8OoCoRacOAGV2t1Xip0q5g0+lS1YalZqKkea6XZ4Js6TP+WbnSh+iG07WsAoYZgDPtayf5tkV0KwX/TaaccdFS/ZEy1lNdAPkQ9pAfOGbCAeDDSwDvdjtf/xvgfWQDH48J/EBjraqMOt2yQNeUJANZVA1ikHnOJ/ngxSVOxiwuQ5cKhXNWtXEK4Zku6M5JN2pjbx/7aAge/70umgMn4BnHPhey4Cu+xuwz5xuDxS8i5dFQR+/rXsdzoLJqeG6iEBlZ9zz+jQeN2PY8Wjh2hA6Bz2+Dzr5XdIFuuHr2XcO4u9OlrcP5yOY88nsfqw7UrAo6v+B6jk69ZuOovynqm5TjKBUCHztmpvS+HDAM7ff0fw2+Zh9b9mpQR9Cy8AT4EDGV2P7WrM3bn8Ph/A8=&lt;/diagram&gt;&lt;/mxfile&gt;">
<defs/>
<g>
<path d="M 85 80 L 85 163.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
@ -122,13 +122,13 @@
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 415px; margin-left: 60px;">
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">
X
N
</div>
</div>
</div>
</foreignObject>
<text x="60" y="419" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
X
N
</text>
</switch>
</g>

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

@ -1,37 +1,37 @@
<mxfile host="65bd71144e">
<diagram id="5al8SiqKVGW9Og6V7Dn-" name="第 1 页">
<mxGraphModel dx="487" dy="568" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<mxGraphModel dx="1072" dy="568" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="4" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="2" target="3">
<mxCell id="4" value="" style="edgeStyle=none;html=1;" parent="1" source="2" target="3" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="2" value="update_data" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxCell id="2" value="update_data" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="310" y="120" width="110" height="70" as="geometry"/>
</mxCell>
<mxCell id="6" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="3" target="5">
<mxCell id="6" value="" style="edgeStyle=none;html=1;" parent="1" source="3" target="5" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="8" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="3" target="7">
<mxCell id="8" value="" style="edgeStyle=none;html=1;" parent="1" source="3" target="7" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="3" value="输入学号" style="whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxCell id="3" value="输入学号" style="whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="305" y="275" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="13" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="5" target="12">
<mxCell id="13" value="" style="edgeStyle=none;html=1;" parent="1" source="5" target="12" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="5" value="输入姓名,成绩" style="whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxCell id="5" value="输入姓名,成绩" style="whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="305" y="415" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="7" value="学生不存在" style="whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxCell id="7" value="学生不存在" style="whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="505" y="275" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="12" value="结束" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxCell id="12" value="结束" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="325" y="545" width="80" height="45" as="geometry"/>
</mxCell>
<mxCell id="14" value="" style="edgeStyle=none;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="7">
<mxCell id="14" value="" style="edgeStyle=none;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="7" edge="1">
<mxGeometry width="100" relative="1" as="geometry">
<mxPoint x="570" y="390" as="sourcePoint"/>
<mxPoint x="370" y="520" as="targetPoint"/>
@ -40,10 +40,10 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="15" value="Y" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxCell id="15" value="Y" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="335" y="355" width="30" height="30" as="geometry"/>
</mxCell>
<mxCell id="16" value="N" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxCell id="16" value="N" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="445" y="265" width="30" height="30" as="geometry"/>
</mxCell>
</root>

@ -0,0 +1,354 @@
#define NAME_LEN 31
#define MAX_PARTS 100
//保存学生成绩信息的结构
struct students
{
int number;
char name[NAME_LEN + 1];
int score;
};
static struct students stu[MAX_PARTS];
static int num_parts = 0;
#include <stdio.h>
#include <stdlib.h>
//定义常量
#define CMD_QUIT 0
#define CMD_QUERY 4
#define CMD_INSERT 5
#define CMD_UPDATE 6
#define CMD_DELETE 7
#define CMD_READ 1
#define CMD_SAVE 2
#define CMD_PRINT 3
#define CMD_SORT 8
#define CMD_CHART 9
// 菜单命令的编号
// 函数声明
void init(void);
void quit(void);
void display_menu(void);
int make_choice(void);
void read_data(void); // 读取
void save_data(void); // 保存
void print_data(void); // 打印
void query_data(void); // 查询
void add_data(void); // 添加
void update_data(void); // 修改
void delete_data(void); // 删除
void sort_data(void); // 排序
void make_chart(void); // 图表
int confirm(const char *msg);
// 主程序
int main(void)
{
init(); // 程序启动
while (1)
{
display_menu();
int c = make_choice();
switch (c)
{
case CMD_QUERY:
query_data();
break;
case CMD_INSERT:
add_data();
break;
case CMD_UPDATE:
update_data();
break;
case CMD_DELETE:
delete_data();
break;
case CMD_READ:
read_data();
break;
case CMD_SAVE:
save_data();
break;
case CMD_PRINT:
print_data();
break;
case CMD_SORT:
sort_data();
break;
case CMD_CHART:
make_chart();
break;
default:
puts("命令错误,请重新选择");
break;
case CMD_QUIT:
if (confirm("确定要退出吗?"))
quit(); // 仅在确认后退出
break;
}
}
return 0;
}
// 函数定义
void init(void)
{
puts("程序启动");
}
void quit(void)
{
puts("程序退出");
exit(EXIT_SUCCESS);
}
void display_menu(void)
{
printf("\n%d 读取 | %d 保存 | %d 打印 | %d 查询 | %d 添加\n%d 修改 | %d 删除 | %d 排序 | %d 图表 | %d 退出\n\n", CMD_READ, CMD_SAVE, CMD_PRINT, CMD_QUERY, CMD_INSERT, CMD_UPDATE, CMD_DELETE, CMD_SORT, CMD_CHART, CMD_QUIT);
}
int make_choice(void)
{
int c; // 用户输入
int n = 0; // 正确读入的数据项个数
while (n == 0)
{
printf("请选择:");
n = scanf("%d", &c); // 尝试读入整数 c
scanf("%*[^\n]"); // 跳过一行中剩余的字符
}
return c;
}
//查询
void query_data(void)
{
int num;
printf("输入学生学号: ");
scanf("%d", &num);
int f = -1;
for (int i = 0; i < num_parts; i++)
{
if (num == stu[i].number)
{
f = i;
break;
}
}
if (f == -1)
{
printf("学生不存在");
}
else
{
printf("学生学号:%d\n", stu[f].number);
printf("学生姓名:%s\n", stu[f].name);
printf("学生成绩:%d\n", stu[f].score);
}
}
//打印
void print_data(void)
{
printf("NUMBER | NAME score\n");
for (int i = 0; i < num_parts; i++)
{
printf("%d | %s %d\n", stu[i].number, stu[i].name, stu[i].score);
}
}
//添加
void add_data(void)
{
int num;
printf("输入学生学号:");
scanf("%d", &num);
int f = 0;
for (int i = 0; i < num_parts; i++)
{
if (num == stu[i].number)
{
f = 1;
break;
}
}
if (f == 0)
{
stu[num_parts].number = num;
printf("输入学生姓名:");
scanf("%s", &stu[num_parts].name);
printf("输入学生成绩:");
scanf("%d", &stu[num_parts].score);
num_parts++;
printf("学生 %d 添加成功\n", num);
}
else
{
printf("学生已存在");
}
}
//修改
void update_data(void)
{
int num;
printf("输入学生学号:");
scanf("%d", &num);
int f = 0;
for (int i = 0; i < num_parts; i++)
{
if (num == stu[i].number)
{
f = 1;
break;
}
}
if (f == 0)
{
printf("学生不存在");
}
else
{
printf("输入学生学号:");
scanf("%d", &stu[num].number);
printf("输入学生姓名:");
scanf("%s", stu[num].name);
printf("输入学生成绩:");
scanf("%d", &stu[num].score);
printf("学生 %d 已更新", num);
}
}
//删除
void delete_data(void)
{
int num;
printf("输入学生学号:");
scanf("%d", &num);
int f = 0, i, j;
for (i = 0; i < num_parts; i++)
{
if (num == stu[i].number)
{
f = 1;
break;
}
}
if (f == 0)
{
printf("学生不存在");
}
else
{
for (j = i; j < num_parts - 1; j++)
{
stu[j] = stu[j + 1];
}
num_parts--;
printf("删除成功");
}
}
void read_data(void)
{
puts("读取数据");
printf("请输入文件名");
char filename[256];
scanf("%s", filename);
FILE *fp = fopen(filename, "r");
if (fp == NULL)
{
perror(filename);
return;
}
int i = 0;
while (fscanf(fp, "%d,%[^,],%d", &stu[i].number, stu[i].name, &stu[i].score) == 3)
{
i++;
}
fclose(fp);
num_parts = i;
printf("读取 %d 记录\n", num_parts);
}
void save_data(void)
{
puts("保存数据");
printf(" 请输入文件名");
char filename[256];
scanf("%s", filename);
FILE *fp = fopen(filename, "r");
if (fp == NULL)
{
perror(filename);
return;
}
for (int i = 0; i < num_parts; i++)
{
fprintf(fp, "%d,%s,%d\n", stu[i].number, stu[i].name, stu[i].score);
}
fclose(fp);
printf("保存%d 成功", num_parts);
}
//排序
void sort_data(void)
{
printf("排序\n");
for (int i = 0; i < num_parts; i++)
{
int change = 0;
static struct students t;
for (int j = 0; j < num_parts - i - 1; j++)
{
if (stu[j].number > stu[j + 1].number)
{
t = stu[j + 1];
stu[j + 1] = stu[j];
stu[j] = t;
change = 1;
}
}
if (!change)
break;
}
for (int i = 0; i < num_parts; i++)
{
int change = 0;
static struct students t;
for (int j = 0; j < num_parts - i - 1; j++)
{
if (stu[j].score > stu[j + 1].score)
{
t = stu[j + 1];
stu[j + 1] = stu[j];
stu[j] = t;
change = 1;
}
}
if (!change)
break;
}
printf("排序已完成");
}
void make_chart(void)
{
printf("NUMBER | NAME score\n");
for (int i = 0; i < num_parts; i++)
{
printf("%d | %s ", stu[i].number, stu[i].name);
for (int j = 0; j < stu[i].score; j++)
{
printf("*");
}
printf("\n");
}
printf("图表\n");
}
int confirm(const char *msg)
{
char c = 'n'; // 默认选择是 no
printf("%s(Y/N): ", msg); // 提示输入 yes/no 进行确认
scanf(" %c%*[^\n]", &c); // 读取第一个字符,忽略剩余字符
return c == 'y' || c == 'Y'; // 返回确认结果
}
Loading…
Cancel
Save