#include<stdio.h>
#include<string.h>
#define maxSize 20
typedef struct{
const char* id;
const char* name;
int scores;
}student;
void insertList(student s[],int* n);
void outputList(student s[],int n);
void findIndex(student f[],int n);
void computeSumScores(student s[],int n);
void computeAvggrade(student s[],int n);
void deleteList(student s[],int* n);
int main(){
int choose;
int index=0;
student students[maxSize];
students[index].id="20141120222";
students[index].name="静静";
students[index].scores=99;
while(true){
printf("*********************************菜单项********************************\n 0 表示退出\n 1 表示插入\n 2 表示查找\n 3 表示删除\n 4 表示输出所有学生信息\n 5 表示计算学生总成绩\n 6 表示计算学生平均成绩\n请输入你的选项:\n");
scanf("%d",&choose);
switch(choose){
case 0:printf("byebye,see you next time!");return 0;
case 1:{
index++;
if(index>maxSize-1){
printf("对不起,存储空间已满,不能插入数据!");break;
}
else{
insertList(students,&index); //中文乱码?????????? -->第二个数是表情符号?乱码???第一个为什么没有乱???
printf("%s %s %d --->",students[index].id,students[index].name,students[index].scores);
printf("插入成功!\n");
break;
}
break;
}
case 2:findIndex(students,index);break;
case 3:deleteList(students,&index);break;
case 4:outputList(students,index);break;
case 5:computeSumScores(students,index);break;
case 6:computeAvggrade(students,index);break;
}
}
return 0;
}
void insertList(student s[],int* n){
char id[20];
char name[20];
int scores;
printf("请输入学生的学号、姓名、成绩,例如:\n20141120111 张三 88\n");
scanf("%s %s %d",id,name,&scores); //注意输入多个参数时输入的字符需要与前面的匹配!!! 好吧 都是我的错!!!!!!!
s[*n].id=strdup(id);
s[*n].name= strdup(name); // 该结构体中name用的是指针而不是数组,所以需要给字符串在堆上申请内存然后再赋值;
//strdup()函数会计算出字符串的长度,然后调用malloc函数在堆上申请相应的空间,最后把字符串的所有字符复制到堆上
s[*n].scores=scores;
}
void outputList(student s[],int n){
for(int i=0;i<=n;i++){
printf("%s %s %d\n\n",s[i].id,s[i].name,s[i].scores);
}
}
void findIndex(student f[],int n){
char id[20];
printf("请输入学生学号,例如:\n20141120111\n");
scanf("%s",id);
for(int i=0;i<=n;i++){
if(i==n && strcmp(f[n].id,id)!=0){
printf("对不起,你查找的学生不存在!\n");
break;
}
if(strcmp(f[i].id,id)==0){
printf("%s %s %d\n",f[i].id,f[i].name,f[i].scores);
break;
}
}
}
void computeSumScores(student s[],int n){
int sum=0;
for(int i=0;i<=n;i++){
sum+=s[i].scores;
}
printf("总成绩为:%d\n",sum);
}
void computeAvggrade(student s[],int n){
int sum=0;
for(int i=0;i<=n;i++){
sum+=s[i].scores;
}
float avgGrade=sum*1.0/(n+1);
printf("学生的平均成绩为:%f\n",avgGrade);
}
void deleteList(student s[],int* n){
char id[20];
printf("请输入你想要删除的同学的学号,例如:\n20141120222\n");
scanf("%s",id);
for(int i=0;i<=*n;i++){
if(i==*n && strcmp(s[i].id,id)!=0){
printf("你输入的学生不存在!");
break;
}
if(strcmp(s[i].id,id)==0){
for(int j=i;j<*n;j++){
s[j]=s[j+1];
}
printf("删除成功!\n");
*n=*n-1;
break;
}
}
}
顺序表实现学生学号姓名成绩的增删查改
需积分: 49 3 浏览量
2016-12-25
01:47:01
上传
评论 1
收藏 2KB RAR 举报
软工小透明
- 粉丝: 37
- 资源: 5
最新资源
- 基于spring+springmvc+hibernate的在线招标系统设计与实现【源码+lw+部署文档+讲解】
- 华为OD真题+模拟题+相关讲解.zip
- C:\\Program Files\\Git\\usr\\bin\\rsync.exe
- matlab中Toolbox中带有的模型预测工具箱
- QCJ .apk
- SAP各模块常用底表清单
- 【java毕业设计】大学毕业设计的账号租赁平台(客户端/上号器)
- 一次完整的JVM GC的流程
- 基于Django + vue前后端分离的博客系统源代码+部署文档,支持的功能有:发布文章、文章分类、注册、登录、留言、代码高亮等
- YOLOX-基于Paddle实现的YOLOX目标检测算法-附项目源码-优质项目实战.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈