今年是专升本第一年,跟老师学习做了个学生管理系统,有菜单选项,基本的增删改查都是没有问题的,废话不多说,代码呈上:
#include <stdio.h>
#include<malloc.h>
#include <string.h>
#include<stdlib.h>
typedef struct {
int no;
char name[8];
float score;
}Student;
typedef struct {
Student elem[100];
int length;
//int listsize;
}SqList;
//判断是否为空
bool ListEmpty(SqList *L){
return (L->length==0);
}
//顺序表的展示
void DispList(SqList *&L){
int i;
if(ListEmpty(L)) {
printf("******计科一班学生信息******\n");
printf("序号\t学号\t姓名\t\t\t成绩\n");
}
else {
printf("******计科一班学生信息******\n");
printf("序号\t学号\t姓名\t\t\t成绩\n");
float averscore=0;
for(i=0;i<L->length;i++){
averscore+=L->elem[i].score;
//printf("平均分为%d\n",averscore);
printf("%d\t%d\t%-8s\t\t%.2f\n",i+1,L->elem[i].no,L->elem[i].name,L->elem[i].score);
}
printf("平均分:%.2f\n",averscore/L->length);
printf("*********************************\n");}
//return 0;
}
//创建顺序表
void CreatList(SqList *&L,Student a[],int n){
int i=0,k=0;
L=(SqList *)malloc(sizeof(SqList));
while(i<n){
L->elem[k]=a[i];
k++;i++;
}
L->length=k;
}
//初始化顺序表
void InitList(SqList *&L){
L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
//向顺序表插入元素
int insertstu(SqList *&L){
int len=(L->length);
//printf("当前表长:%d\n",len);
printf("请输入要插入学生的\n学号(1-4位):\n");
scanf("%d",&L->elem[len].no);
// printf("当前学号长度是%d\n",sizeof(L->elem[len].no));
while(L->elem[len].no<1 || L->elem[len].no>9999){
printf("不符合学号规定长度,请重新输入!\n");
//printf("当前学号长度是:%d\n",sizeof(L->elem[len].no));
scanf("%d",&L->elem[len].no);
}
printf("姓名(2-4位):\n");
scanf("%s",&L->elem[len].name);
//printf("%d",sizeof(L->elem[len].name));
while(strlen(L->elem[len].name)<4|| strlen(L->elem[len].name)>8){
printf("%d",strlen(L->elem[len].name));
printf("不符合规定姓名长度,请重新输入!\n");
scanf("%s",&L->elem[len].name);
}
//printf("%s",L->elem[len].name);
printf("成绩(满分100,精确到小数点后2位)\n");
scanf("%f",&L->elem[len].score);
int count = 1;
float m=L->elem[len].score;
while(m>9){
m=m/10;
count ++;
}
while(count>2||count<1){
printf("不符合规定长度,请重新输入!\n");
count=1;
scanf("%f",&L->elem[len].score);
m=L->elem[len].score;
while(m>9){
m=m/10;
count ++;
}
}
L->length = L->length+1;
// int i;
//printf("%d",L->length);
if(ListEmpty(L)) return false;
printf("操作成功!");
DispList(L);
}
//输出顺序表长度
void ListLength(SqList *L){
printf("学生信息一共%d条",L->length);
DispList(L);
}
//定义菜单
int menu(){
printf(" \n按回车键进入菜单........\n");
int c;
getchar();
printf("请输入想要操作的代码数字:\n");
printf("****************MENU******************\n");
printf(" 1.插入学生信息\n");
printf(" 2.删除学生信息\n");
printf(" 3.修改学生信息\n");
printf(" 4.查看学生信息表\n");
printf(" 5.查看学生表长度\n");
printf(" 6.退出\n");
scanf("%d",&c);
while(!(c>=1 && c<=6)){
printf("请输入数字1-6!");
scanf("%d",&c);
if(c>=1 && c<=6)
break;
}
return c;
}
//定义删除函数
void delstu(SqList *L){
int num;
printf("请输入要删除的学生序号:\n");
scanf("%d",&num);
while(num<1||num>L->length) {
printf("该同学不存在,请重新输入!\n");
scanf("%d",&num);
}
//printf("%d",num);
//getchar();
for(num;num<L->length+1;num++){
L->elem[num-1]=L->elem[num];
}
printf("删除成功\n");
L->length--;
DispList(L);
}
//定义修改函数
int update(SqList *L){
if(ListEmpty(L)) {
printf("学生表为空!!\n");
return false;
}
int no;
printf("请输入要修改成绩的学生序号:\n");
scanf("%d",&no);
while(no<1||no>L->length){
printf("该同学不存在,请重新输入!\n");
scanf("%d",&no);
}
printf("请输入该同学要修改的内容,用空格隔开:\n");
printf("学号 姓名 成绩\n");
scanf("%d%s%f",&L->elem[no-1].no,&L->elem[no-1].name,&L->elem[no-1].score);
}
//主函数部分
int main(){
SqList *L;
Student elem[100];
elem[0].no=1;elem[1].no=2;
//char stu[10];
strcpy(elem[0].name,"刘方君");strcpy(elem[1].name,"唐诗");
elem[0].score=99;elem[1].score=88;
CreatList(L,elem,2);
DispList(L);
//insertstu(L);
for(;;){
switch(menu()){
case 1:{
insertstu(L);
break;
};
case 2:{
delstu(L);
break;
}
case 3:{
update(L);
break;
}
case 4:{
DispList(L);
break;
}
case 5:{
ListLength(L);
break;
}
case 6:{
exit(0);
}
}
}
return 0;
}
作者是初学,如有纰漏,敬请指正!