c语言学生数据管理系统

用C语言编写一个学生管理系统

概述

单纯只用多个数组管理学生成绩信息,不使用结构体,该程序最主要的难点是依据学号或总成绩对学生银培信息进行排序,借助了临时数组来标记排好序的下标。

运行结果如下:

输入数据

根据总成绩排序:

根据学号删除学生信息:

贴上代码(有点多)

#include stdio.h

#include stdlib.h             //exit函数头文件

#include string.h             //字符串相关操作头文件

#define  MAX_STUDENT  30        //最大学生数

//函数声明,本程序共10个子函数,每个函数对应一个操作

void student_scanf(int n);

void student_printf(int n);

int student_find_name(int n);

int student_find_num(int n);

void student_sort_num(int n);

void student_sort_sum(int n);

int student_alter_num(int n);

int student_alter_name(int n);

int student_delete_num(int n);

int student_delete_name(int n);

//全局数组变量,用于存储学生信息

char names[MAX_STUDENT][50];

int math[MAX_STUDENT];

int english[MAX_STUDENT];

int computer[MAX_STUDENT];

int sum[MAX_STUDENT];

int num[MAX_STUDENT];

//以下变量用于学生信息数组排序,作为临时数组

int temp_num[MAX_STUDENT];

char temp_names[MAX_STUDENT][50];

int temp_math[MAX_STUDENT];

int temp_english[MAX_STUDENT];

int temp_computer[MAX_STUDENT];

int temp_sum[MAX_STUDENT];

//sort数组存储排好序的学号或姓名下标

int sort[MAX_STUDENT];

//循环全局变量

int i, j;

//main主函数

int main(void)

{

int choice,n;

while (1)

{

printf(“*************************************\n”);

printf(“欢迎使用学生成绩管理系统\n”);

printf(“[1] 输入所有学生信息\n”);

printf(“[2] 输出所有学生成绩\n”);

printf(“[3] 按学号查找某个学生信息\n”);

printf(“[4] 按姓名查找某个学生信息\n”);

printf(“[5] 按学号对学生排序\n”);

printf(“[6] 按总成绩对学生排序\n”);

printf(“[7] 按学号修改某个学生信息\n”);

printf(“[8] 按姓名修改某个学生信锋谨唯息\n”);

printf(“[9] 按学号删除某个学生信息\n”);

printf(“[10] 按姓名删除某个学生信息\n”);

printf(“[0] 退出程序\n”);

printf(“请输入您的选择(0 – 9):”);

scanf(“%d”,choice);

printf(“**************************************)\n”);

switch (choice)

{

case 1://录入;

printf(“请输入录入的学生信息数: “);

scanf(“%d”,n);

student_scanf(n);

break;

case 2://输出晌芹;

student_printf(n);

break;

case 3://根据学号查找

student_find_num(n);

break;

case 4://根据姓名查找

student_find_name(n);

break;

case 5://按学号排序

student_sort_num(n);

break;

case 6://按姓名排序

student_sort_sum(n);

break;

case 7://按学号修改

student_alter_num(n);

break;

case 8://按姓名修改

student_alter_name(n);

break;

case 9://按学号删除

student_delete_num(n);

n–;

break;

case 10://按姓名删除

student_delete_name(n);

n–;

break;

case 0://退出程序

printf(“退出程序\n”);

printf(“程序结束,谢谢使用!\n”);

exit(0);

default:

printf(“您输入的菜单有误。请重新输入!\n”);

}

}

return 0;

}

//1.输入信息

void student_scanf(int n)

{

for (i = 0; in; ++i)

{

printf(“\n请输入第%d个学生的信息:\n”, i + 1);

printf(“\n学号:”);

scanf(“%d”, num[i]);

printf(“\n姓名:”);

scanf(“%s”, names[i]);

printf(“\n数学成绩:”);

scanf(“%d”, math[i]);

printf(“\n英语成绩:”);

scanf(“%d”, english[i]);

printf(“\n计算机成绩:”);

scanf(“%d”, computer[i]);

//计算总成绩

sum[i] = math[i] + english[i] + computer[i];

}

}

//2.打印信息     

void student_printf(int n)

{

printf(“\n学号\t姓名\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n”);

printf(“———————————————————-\n”);

for (i = 0; in; ++i)

{

printf(“%d\t%s\t%d\t\t%d\t\t%d\t\t%d\n”, num[i], names[i], math[i], english[i], computer[i], sum[i]);

}

printf(“——————————————————-\n”);

}

//3.按学号查找

int student_find_num(int n)

{

int nums;

int result;

printf(“请输入待查找的学生学号:”);

scanf(“%d”,nums);

result= -1;

for (i = 0; in; ++i)

{

if (nums == num[i])

{

result = i;

break;

}

}

//最后判断q值

if (result == -1)

{

printf(“没有该学生信息!\n”);

return 0;

}

else

{

//先打印表头

printf(“\n学号\t\t姓名\t\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n”);

//再打印数据

printf(“%d\t\t%s\t\t%d\t\t%d\t\t%d\t%d\n”, num[result], names[result], math[result], english[result], computer[result], sum[result]);

printf(“打印出查找结果!\n”);

}

return 1;

}

//4.用姓名查找成绩

int student_find_name(int n)

{

char name[200];

int result;

printf(“请输入待查找的学生姓名:”);

scanf(“%s”, name);

result = -1;

for (i = 0; in; ++i)

{

if (strcmp(name, names[i]) == 0)

{

result = i;

break;

}

}

if (result == -1)

{//未找到结果

printf(“没有该学生信息!\n”);

return 0;

}

else//找到结果

{

printf(“\n学号\t姓名\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n”);

printf(“%d\t%s\t%d\t\t%d\t\t%d\t\t%d\n”, num[result], names[result], math[result], english[result], computer[result], sum[result]);

printf(“已完成查找!\n”);

}

return 1;

}

//5.按学号排序

void student_sort_num(int n)

{

int min,max;

for(i=0; in; ++i)  //复制临时数组

{

temp_num[i] = num[i];

}

max = 0;        //查找学号最大值,将其下标存至sort数组的最后一个值中

for(j=1; jn; j++)

{

if(temp_num[max]temp_num[j])

max = j;

}

sort[n-1] = max;    //sort数组的最后一个数

for(i=0; in-1; ++i)

{

min = i;        //查找学号最小值

for(j=0; jn; ++j)

{

if(temp_num[min]temp_num[j])

min = j;

}

//sort数组记录排序的学生信息的下标

sort[i] = min;

temp_num[min] = temp_num[max];      //利用临时数组将查找过的学生信息的学号设为最大值,排除查找干扰     

}

for(i=0; in; ++i)  //再复制一次临时数组

{

temp_num[i] = num[i];

strcpy(temp_names[i],names[i]);

temp_math[i] = math[i];

temp_english[i] = english[i];

temp_computer[i] = computer[i];

temp_sum[i] = sum[i];

}

for(i=0; in; i++)  //按照下标对原数组进行修改

{

num[i] = temp_num[sort[i]];

strcpy(names[i],temp_names[sort[i]]);

math[i] = temp_math[sort[i]];

english[i] = temp_english[sort[i]];

computer[i] = temp_computer[sort[i]];

sum[i] = temp_sum[sort[i]];

}

printf(“排序完毕,请按菜单键2查看排序结果!\n”);

return ;

}

//6.按总成绩排序

void student_sort_sum(int n)

{

int min,max;

for(i=0; in; ++i)  //复制临时数组

{

temp_sum[i] = sum[i];

}

max = 0;        //查找总成绩最大值,将其下标存至sort数组的最后一个值中

for(j=1; jn; j++)

{

if(temp_sum[max]temp_sum[j])

max = j;

}

sort[n-1] = max;    //sort数组的最后一个数

for(i=0; in-1; ++i)

{

min = i;        //查找总成绩最小值

for(j=0; jn; ++j)

{

if(temp_sum[min]temp_sum[j])

min = j;

}

//sort数组记录排序的学生信息的下标

sort[i] = min;

temp_sum[min] = temp_sum[max];      //利用临时数组将查找过的学生信息的总成绩设为最大值,排除查找干扰     

}

for(i=0; in; ++i)  //再复制一次临时数组

{

temp_num[i] = num[i];

strcpy(temp_names[i],names[i]);

temp_math[i] = math[i];

temp_english[i] = english[i];

temp_computer[i] = computer[i];

temp_sum[i] = sum[i];

}

for(i=0; in; i++)  //按照下标对原数组进行修改

{

num[i] = temp_num[sort[i]];

strcpy(names[i],temp_names[sort[i]]);

math[i] = temp_math[sort[i]];

english[i] = temp_english[sort[i]];

computer[i] = temp_computer[sort[i]];

sum[i] = temp_sum[sort[i]];

}

printf(“排序完毕,请按菜单键2查看排序结果!\n”);

return ;

}

//7.按学号修改学生信息

int student_alter_num(int n)

{

int nums;

int result;

printf(“请输入待修改的学生学号:”);

scanf(“%d”,nums);

result= -1;

for (i = 0; in; ++i)

{

if (nums == num[i])

{

result = i;

break;

}

}

//最后判断q值

if (result == -1)

{

printf(“没有该学生信息!\n”);

return 0;

}

else    //修改信息值

{

printf(“请重新输入该学生信息:\n”);

printf(“学号:\n”);

scanf(“%d”,num[result]);

printf(“姓名:\n”);

scanf(“%s”,names[result]);

printf(“数学成绩:\n”);

scanf(“%d”,math[result]);

printf(“英语成绩:\n”);

scanf(“%d”,english[result]);

printf(“计算机成绩:\n”);

scanf(“%d”,computer[result]);

sum[result] = math[result] + english[result] + computer[result];

}

return 1;

}

//8.按姓名修改学生信息

int student_alter_name(int n)

{

char name[50];

int result;

printf(“请输入待修改的学生姓名:”);

scanf(“%s”,name);

result= -1;

for (i = 0; in; ++i)

{

if (strcmp(name,names[i])==0)

{

result = i;

break;

}

}

//最后判断q值

if (result == -1)

{

printf(“没有该学生信息!\n”);

return 0;

}

else        //修改信息值

{

printf(“请重新输入该学生信息:\n”);

printf(“学号:\n”);

scanf(“%d”,num[result]);

printf(“姓名:\n”);

scanf(“%s”,names[result]);

printf(“数学成绩:\n”);

scanf(“%d”,math[result]);

printf(“英语成绩:\n”);

scanf(“%d”,english[result]);

printf(“计算机成绩:\n”);

scanf(“%d”,computer[result]);

sum[result] = math[result] + english[result] + computer[result];

}

return 1;

}

//9.按学号删除学生信息

int student_delete_num(int n)

{

int nums;

int result;

printf(“请输入待删除的学生学号:”);

scanf(“%d”,nums);

result= -1;

for (i = 0; in; ++i)

{

if (nums == num[i])

{

result = i;

break;

}

}

//最后判断q值

if (result == -1)

{

printf(“没有该学生信息!\n”);

return 0;

}

else    //删除当前学生信息即为将数组从result的位置依次前挪一个位置

{

for(i=result; in-1; ++i)   //最后在main函数中,要将n的值减1

{

num[i] = num[i+1];

strcpy(names[i],names[i+1]);

math[i] = math[i+1];

english[i] = english[i+1];

computer[i] = computer[i+1];

sum[i] = sum[i+1];

}

}

return 1;

}

//10.按姓名删除学生信息

int student_delete_name(int n)

{

char name[50];

int result;

printf(“请输入待删除的学生姓名:”);

scanf(“%s”,name);

result= -1;

for (i = 0; in; ++i)

{

if (strcmp(name,names[i])==0)

{

result = i;

break;

}

}

//最后判断q值

if (result == -1)

{

printf(“没有该学生信息!\n”);

return 0;

}

else    //删除当前学生信息即为将数组从result的位置依次前挪一个位置

{

for(i=result; in-1; ++i)       //最后在main函数中,要将n的值减1

{

num[i] = num[i+1];

strcpy(names[i],names[i+1]);

math[i] = math[i+1];

english[i] = english[i+1];

computer[i] = computer[i+1];

sum[i] = sum[i+1];

}

}

return 1;

}

c语言学生数据管理系统

用c语言编写学生信息管理系统

#includestdio.h

#includestdlib.h

#includestring.h

#includeconio.h

#define N 200

int input(struct Student stu[N]);

void save(struct Student stu[N],int n);

int load(struct Student stu[N]);

void output(struct Student stu[N],int n);

int insert(struct Student stu_save[],int n);

void sort(struct Student stu_save[],int n);

void find(struct Student stu_save[],int n);

int delete_stu(struct Student stu_save[],int n);

typedef struct Student

{

char num[20];

char name[20];

char sex;

int age;

float score[3];

float tolscore;

float ave;

}STU;

int main()

{

int total=0,a;

STU stu[N];

printf(“☆☆☆☆☆学籍管理系统☆☆☆☆☆\n\n”);

do{

printf(“\n**********************************\n”);

printf(“1-导入学生信息\n2-加载学生信息\n3-保存学生尘源信息\n4-按学号插入学生\n5-给学生排序\n6-查找学生\n7-删除学生\n8-输出当前学生数据\n9-退出\n”);

printf(“**********************************\n”);

printf(“请按键选择:”);

scanf(“%d”,a);

switch(a)

{

case 1:

total=input(stu);

break;

case 2: total=load(stu);break;

case 3:save(stu,total);break;

case 4: total+=insert(stu,total);break;

case 5:sort(stu,total);break;

case 6:find(stu,total);break;

case 7:total-=delete_stu(stu,total);break;

case 8:output(stu,total);break;

case 9:exit(0);break;

default:printf(“输入错误,请重新输入!\n”);break;

}

//system(“cls”);

}while(1);

}

int input(struct Student stu[])

{

int i,j,n;

float sum;

printf(“请输入要导入的学生人数\n”);

scanf(“%d”,n);

printf(“请输入学生的学号、姓名、性别、年龄及三门课成绩\n”);

for(i=0;in;i++)

{

scanf(“%s”,stu[i].num);

scanf(“%s”,stu[i].name);

scanf(” %c”,stu[i].sex); //%c前的空格用于接收上一个字蚂汪符串后的空格、回车、制表符,etc

scanf(“%d”,stu[i].age);

sum=0;

for(j=0;j3;j++)

{

scanf(“%f”,stu[i].score[j]);

sum+=stu[i].score[j];

}

stu[i].tolscore=sum;

stu[i].ave=sum/3.0f;

}

return (n);

}

void save(struct Student stu[],int n)

{

FILE *fp;

int i;

char filename[20];

printf(“请派物态输入文件名:”);

scanf(“%s”,filename);

if(strchr(filename,’.’)==NULL)

strcat(filename,”.dat”);

if((fp=fopen(filename,”wb”))==NULL)

{

printf(“Cannot open this file\n”);

system(“pause”);

return;

}

fwrite(n,sizeof(int),1,fp);

for(i=0;in;i++)

fwrite(stu[i],sizeof(struct Student),1,fp);

fclose(fp);

printf(“保存成功!”);

system(“pause”);

return;

}

int load(struct Student stu_save[])

{

FILE *fp;

int i,n;

char filename[20];

printf(“请输入要加载的文件名: “);

//getchar();

scanf(“%s”,filename);

// gets(filename);

if(strchr(filename,’.’)==NULL)

strcat(filename,”.dat”);

if((fp=fopen(filename,”rb”))==NULL)

{

printf(“Cannot open this file\n”);

system(“pause”);

return 0;

}

fread(n,sizeof(int),1,fp);

for(i=0;in;i++)

fread(stu_save[i],sizeof(struct Student),1,fp);

fclose(fp);

system(“cls”);

printf(“文件加载成功!数据如下”);

output(stu_save,n);

return n;

}

void output(struct Student stu_save[],int n)

{

int i,j;

// system(“cls”);

printf(“\n学号\t姓名\t性别\t年龄\t成绩一\t成绩二\t成绩三\t总分\t平均分\n”);

for(i=0;in;i++)

{

printf(“%s\t”,stu_save[i].num);

printf(“%s\t”,stu_save[i].name);

printf(“%c\t”,stu_save[i].sex);

printf(“%d\t”,stu_save[i].age);

for(j=0;j3;j++)

printf(“%g\t”,stu_save[i].score[j]);

printf(“%g\t”,stu_save[i].tolscore);

printf(“%.2f”,stu_save[i].ave);

putchar(10);

}

system(“pause”);

return;

}

int insert(struct Student stu_save[],int n)

{

int i,j,num=0;

float sum=0;

struct Student s;

char flag;

if(n200)

{

printf(“空间已满,无法插入!\n”);

return 0;

}

// load(stu_save,n-1);

do{

printf(“\n请依次输入学号、姓名、性别、年龄及三门课成绩\n”);

scanf(“%s”,s.num);

scanf(“%s”,s.name);

scanf(” %c”,s.sex); //%c前的空格用于接收上一个字符串后的空格、回车、制表符,etc

scanf(“%d”,s.age);

for(j=0;j3;j++)

scanf(“%f”,s.score[j]);

sum=0;

for(j=0;j3;j++)

sum+=s.score[j];

s.tolscore=sum;

s.ave=sum/3;

num++;

for(i=n+num-1;strcmp(stu_save[i-1].num,s.num)0i0;i–)

stu_save[i]=stu_save[i-1];

stu_save[i]=s;

printf(“插入成功!”);

fflush(stdin);

do

{

printf(“继续插入?(y/n)”);

flag=getch();

}while(flag!=’y’flag!=’n’);

}while(flag==’y’);

system(“pause”);

//save(stu_save,n);

return num;

}

void sort(struct Student stu_save[],int n)

{

int a,i,j;

struct Student t;

system(“cls”);

printf(“\n1-按序号排序\n2-按成绩排序\n请选择:”);

scanf(“%d”,a);

while(a!=1a!=2)

{

printf(“输入有误,请重新输入!\n”);

scanf(“%d”,a);

}

//load(stu_save,n);

if(a==1)

{

for(i=0;in-1;i++)

for(j=0;jn-i-1;j++)

{

if(strcmp(stu_save[j].num,stu_save[j+1].num)0)

{

t=stu_save[j];

stu_save[j]=stu_save[j+1];

stu_save[j+1]=t;

}

}

}

else

{

for(i=0;in-1;i++)

for(j=0;jn-i-1;j++)

{

if(stu_save[j].avestu_save[j+1].ave)

{

t=stu_save[j];

stu_save[j]=stu_save[j+1];

stu_save[j+1]=t;

}

}

}

// save(stu_save,n);

printf(“排序成功!\n”);

output(stu_save,n);

return;

}

void find(struct Student stu_save[],int n)

{

char ch;

do{

int i,j,w=1;

char search[20];

//load(stu_save,n);

printf(“请输入学生的学号或姓名”);

scanf(“%s”,search);

for(i=0;in;i++)

{

if(strcmp(stu_save[i].num,search)==0||strcmp(stu_save[i].name,search)==0)

{

printf(“查找成功,该学生的信息为:\n”);

printf(“%s\t”,stu_save[i].num);

printf(“%s\t”,stu_save[i].name);

printf(“%c\t”,stu_save[i].sex);

printf(“%d\t”,stu_save[i].age);

for(j=0;j3;j++)

printf(“%g\t”,stu_save[i].score[j]);

printf(“%g\t”,stu_save[i].tolscore);

printf(“%.2f”,stu_save[i].ave);

putchar(10);

w=0;

break;

}

}

if(w)

printf(“查找失败\n”);

do

{

printf(“\n按Y继续查找,按N返回上级菜单\n”);

ch=getch();

}while(ch!=’y’ch!=’n’);

if(ch==’n’)

return;

}while(ch==’y’);

}

int delete_stu(struct Student stu_save[],int n)

{

int i,w=1;

char search[20];

// load(stu_save,n);

printf(“\n请输入要删除学生的姓名或学号\n”);

scanf(“%s”,search);

for(i=0;in;i++)

if(strcmp(stu_save[i].num,search)==0||strcmp(stu_save[i].name,search)==0)

{

w=0;

break;

}

if(w)

{

printf(“无此学生!\n”);

return 0;

}

for(;in-1;i++)

stu_save[i]=stu_save[i+1];

printf(“删除成功!\n”);

// save(stu_save,n-1);

return 1;

}

之前随便写的 忘了有没有调试 有问题再私信找我 采纳哦~~

c语言学生信息管理系统代码

代码如下:

#includestdio.h

#includemalloc.h

#includestdlib.h

#includestring.h

#includeconio.h

typedef struct examinee //考生信息结构

{   char examno[20]; //准考证号

char name[10]; //姓名

char sex[4]; //性别

short age; //年龄

char examtype[10]; //报考科目

}ElemType;

typedef struct Node //定义链表结点

{

ElemType data; //数据域

struct Node *next; //指针域

}Node,*List,*position;

List make_empty( List L ); //创建一个带头结点的空表

int is_empty( List L ); //测试链表是否是空表

int is_last( position p, List L ); //测试当前位置是否是表尾

position make_node( position p,int n ); //创建结点并输入考生信息

void put_information( position p ); //是否输出该考生信息

void put_name_information( List L ); //输出姓名为xx的考生信息

int put_pos_information( position p ); //输出该地址考生信息

void link_to_tail( List L, position p ); //将结点连接到表尾

int ciculation_make(); //循环创建考生信息

int judge_put_all(); //是否输出所有考生信息

void put_all(List L); //输出所有考生信息。

position find( List L ); //查找第一个姓名为xx的元素并返回位置

position find_previous( List L ); //查找第一个姓名为xx的元素并返回该元素直接前驱的位置

//int judge_delete_val(); //询问是否删除考生数据

int delete_val( List L ); //删除指定考生信息并樱备亮输出其信息

void menu(List L); //菜单函数

List L;

//position p;

int

main( void ) 

{

List L = NULL; //定义滚伍头结点指针

position p = NULL; //定义表工作指针

L = make_empty( L ); //创建空表

printf(“\t\t\t★★考生报名管理程序★★\n\t\t—————————————-\n”);

menu(L);

return 0;

}

//创建一个带头结点的空表

List

make_empty( List L)

{

L = ( List ) malloc (sizeof( Node ));

if(NULL == L)

{

printf(“内存分配脊宽失败”);

exit( 1 );

}

L-next = NULL;

//printf(“空表创建成功。\n”);

return L;

}

//创建结点并输入考生信息

position

make_node( position p ,int n)

{

if(n) //n为1是创建结点并输入,n为0是修改

{

p = ( position ) malloc ( sizeof ( Node ));

p-next = NULL ;

}

printf(“请输入考生准考证号:”);

gets(p-data.examno);

printf(“请输入考生姓名:”);

gets(p-data.name);

do

{

printf(“请输入考生性别,只能输入“男”或者“女”:”);

gets(p-data.sex);

}

while( 0 != strcmp( p-data.sex, “男” ) 0 != strcmp( p-data.sex, “女” )); //判断性别是否有误

printf(“请输入考生年龄:”);

scanf(“%hd”,p-data.age);

getchar();  //如果把这句删掉,就“无法执行”下面的报考类别

/*下面的do while用来判断报考类别是否输入有误*/

do

{

printf(“请输入报考类别,只能输入“数学”或“英语”或者“数据结构”:”);

gets(p-data.examtype);

}

while( 0 != strcmp( “英语”, p-data.examtype ) 0 != strcmp( “数学”, p-data.examtype ) 0 != strcmp( “数据结构”, p-data.examtype ));

if(n)

{

printf(“报名成功\n”);

}

else

{

printf(“修改成功\n”);

}

return p;

}

//前插法;

void

link_to_tail( List L, position p)

{

p-next = L-next;

L-next = p;

}

//查找第一个姓名为xx的元素并返回位置

position

find( List L )

{

position p = L-next;

char name[10];

printf(“请输入你要查找的考生姓名:”);

gets(name);

while( p != NULL 0 != strcmp( p-data.name , name))

{

p=p-next;

}

return p;

}

//测试链表是否是空表

int

is_empty( List L )

{

return L-next == NULL;

}

//测试当前位置是否是表尾

int

is_last( position p, List L )

{

return p-next == NULL;

}

//输出姓名为xx的考生信息

void

put_name_information( List L )

{

position p = find(L);

if(p!=NULL)

{

printf(“您要查找的考生信息:\n”);

printf(“准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n\n”,p-data.examno,p-data.name,p-data.sex,p-data.age,p-data.examtype);

}

else

{

printf(“没有您要找的学生。\n”);

}

}

//循环创建考生信息

int

ciculation_make()

{

int n = 2;

do

{

printf(“是否继续创建考生信息?是请输入“1”,不是请输入“0”:”);

scanf(“%d”,n);

getchar();

}

while( n != 0 n != 1);

return n;

}

//是否输出考生信息

void

put_information( position p )

{

int n=2;

do

{

printf(“是否输出该考生信息?是请输入“1”,不是请输入“0”:”);

scanf(“%d”,n);

getchar();

}

while( n != 0 n != 1);

if(n)

{

printf(“准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n”,p-data.examno,p-data.name,p-data.sex,p-data.age,p-data.examtype);

}

}

//是否输出所有考生信息

int

judge_put_all()

{

int n = 2;

do

{

printf(“是否输出所有考生信息?是请输入“1”,不是请输入“0”:”);

scanf(“%d”,n);

getchar();

}

while( n != 0 n != 1);

return n;

}

//输出所有考生信息

void

put_all(List L)

{

if(L-next == NULL)

{

printf(“现无考生报名!\n”);

}

else

{

position p=L-next;

while( p != NULL )

{

printf(“准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n”,p-data.examno,p-data.name,p-data.sex,p-data.age,p-data.examtype);

p=p-next;

}

}

//getchar();

}

//询问是否删除考生数据

int

judge_delete_val()

{

int n = 2;

do

{

printf(“是否要删除某个考生数据?是请输入“1”,不是输入“0”:”);

scanf(“%d”,n);

getchar();

}

while( n != 0 n != 1);

return n;

}

//查找第一个姓名为xx的元素并返回其直接前驱的位置

position

find_previous( List L )

{

position q = L;

position p = L-next;

char name[10];

printf(“请输入你要查找的考生姓名:”);

gets(name);

while( p != NULL 0 != strcmp( p-data.name , name))

{

q=p;

p=p-next;

}

if( p != NULL )

{

return q;

}

else

return p;

}

//删除指定考生信息并输出其信息

int

delete_val(List L)

{

int n=2;

position q=NULL;

position p=find_previous( L ); //返回考生信息地址

if( NULL == p )

{

printf(“你要删除的考生不存在\n”);

return 0;

}

else

{

q = p-next;

p-next = q-next;

printf(“删除成功。\n删除的考生信息为:\n”);

printf(“准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n”,q-data.examno,q-data.name,q-data.sex,q-data.age,q-data.examtype);

free(q);

return 1;

}

}

//输出该地址考试信息

int

put_pos_information( position p )

{

if(p != NULL )

{

printf(“准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s\n\n”,p-data.examno,p-data.name,p-data.sex,p-data.age,p-data.examtype);

return 1;

}

else

{

printf(“没有您要查找的学生。”);

return 0;

}

}

//菜单函数

void

menu(List L)

{

printf(“\t\t\t   a. 考生报名入口\n”);

printf(“\t\t\t   b. 查询考生信息\n”);

printf(“\t\t\t   c. 修改考生信息\n”);

printf(“\t\t\t   d. 删除考生信息\n”);

printf(“\t\t\t   e. 全部考生信息\n”);

printf(“\t\t\t   f. 程序作者信息\n”);

printf(“\t\t\t   g.   退出程序\n”);

char n=’h’;

while(n != ‘g’)

{

do  //确定正确输入

{

printf(“请通过字母序号选择功能:”);

n = getchar();

getchar();

putchar(‘\n’);

if( n ‘a’ || n ‘g’)

{

printf(“错误的字母序号。\n”);

}

}

while( n ‘a’ || n ‘g’ );

switch (n)

{

case ‘a’:

{

printf(“请输入报名考生信息:\n”);

position p = make_node( p, 1 ); //创建新结点

link_to_tail( L, p ); //将新结点连接到表上

put_information( p );   //是否输出该考生信息

putchar(‘\n’);

}

break;

case ‘b’:

{

put_name_information( L );

putchar(‘\n’);

}

break;

case ‘c’:

{

int n=0;

position p = NULL;

printf(“您正在进行修改操作。\n”);

p = find(L);

n = put_pos_information( p );

if(n)

{

make_node( p , 0 );

put_information( p );   //是否输出该考生信息

}

putchar(‘\n’);

}

break;

case ‘d’:

{

printf(“您正在进行删除操作。\n”);

delete_val( L );

putchar(‘\n’);

}

break;

case ‘e’:

{

put_all( L );

putchar(‘\n’);

}

break;

case ‘f’:

{

printf(”              修改日期    版本号      修改人      修改内容    \n”);

printf(”        ——————————————————–\n”);

printf(”              2018.6.19    v2.0       陈百川     增加主菜单\n”);

printf(”              2018.6.23    v3.0       陈百川   增加生成文件功能\n\n”);

printf(”            该版本号为v2.0\n”);

putchar(‘\n’);

}

break;

default:

break;

}

}

printf(”                     感谢本次使用,祝您生活愉快。”);

getch();

}

回答于 2022-12-11

C语言 学生管理系统

#include

#include

#include

#include

#define max 20

typedef struct student //学生

{

char sno[max]; // 学号

char sname[max]; //姓名

char sex[max]; //性别

char age[max]; //年龄

char depart[max]; //系

char classs[max]; //班

char grade[max]; //年级

struct student* next;

} student;

student* head;

int LogOn() //登录模块消埋,已实现输入密码不回显,如果中途发现输错某几位,可退格键重输

{

char username[max],password[max];

printf(“\n请输入用户名:”);

scanf(“%s”,username);

printf(“\n请输入密码(最多15位):”);

//开始以不回显且支持退格方式获取输入密码

int i=0;

while((i=0)(password[i++]=getch())!=13)//条件i=0是用于限制带枝退格的范围

{

if(password[i-1]==’\b’)//对退格键的处理

{

printf(“%c%c%c”,’\b’,’\0′,’\b’);

i=i-2;

}

else

printf(“*”);

}

password[–i]=’\0′;

//已获取密码。验证用户身份

if(!strcmp(username,”zhang”)!strcmp(password,”8147086″))

{

printf(“\n登录成功!”);

return 1;

}

else

return 0;

}

void regist()

{

char ch;

student *s,*ptr; //s用来建新结点,ptr用来暂存头结点

do

{

s=(student*)malloc(sizeof(student)); // 新建一个学生结点

printf(“\n开始注册…”); //开始注册

printf(“\n请输入该学生的学号:”);

scanf(“%s”,s-sno);

printf(“\n请输入该学生的姓名:”);

scanf(“%s”,s-sname);

printf(“\n请输入该学生的性别:”);

scanf(“%s”,s-sex);

printf(“\n请输入该学生的年龄:”);

scanf(“%s”,s-age);

printf(“\n请输入该学生的系:”);

scanf(“%s”,s-depart);

printf(“\n请输入该学生所在的班:”);

scanf(“%s”,s-classs);

printf(“\n请输入该学生所在的年级”);

scanf(“%s”,s-grade);

ptr=head;

head=s;//将新结点插入队头

s-next=ptr;

fflush(stdin);

printf(“\n请问是否继续注册?(Y/N)”);

scanf(“%c”,ch);

}while(ch==’Y’||ch==’y’);

return;

}

void ElePrint(char str[]) //输出单个元素

{

if(str==NULL) exit(0);

printf(“%s”,str);

for(unsigned int i=0;i12-strlen(str);i++) printf(” “);//为了对齐输出,需插入一些空格

return;

}

int LinePrint(student *ptr) //输出一行

{

if(ptr==NULL) /拿行蚂/检查传进来的指针

return 0;

printf(“\n”);

ElePrint(ptr-sno);

ElePrint(ptr-sname);

ElePrint(ptr-age);

ElePrint(ptr-sex);

ElePrint(ptr-depart);

ElePrint(ptr-classs);

ElePrint(ptr-grade);

return 1;

}

void print() //输出全部学生信息

{

student *ptr=head;

printf(“\n学号 姓名 年龄 性别 系 班 年级 “);

while(ptr)

{

LinePrint(ptr);

ptr=ptr-next;

}

printf(“\n”);

return;

}

void search()//查询模块

{

int method;//查询方式

char no[max],name[max],departm[max],clss[max],grades[max]; //用来接收查询关键字

while(1)

{

printf(“\n请选择查询方式”);

printf(“\n1.按学号查询”);

printf(“\n2.按姓名查询”);

printf(“\n3.按所在系查询”);

printf(“\n4.按所在班级查询”);

printf(“\n5.按所在年级查询”);

printf(“\n6.打印全部学生信息”);

printf(“\n7.返回主菜单\n”);

scanf(“%d”,method);

student *p=head,*temp;

switch(method)

{

case 1:

printf(“\n请输入要查询的学号:”);

scanf(“%s”,no);

while(p)

{

if(!strcmp(p-sno,no))

break;

else

{

temp=p;

p=p-next;

}

}

printf(“\n学号 姓名 年龄 性别 系 班 年级 “);

LinePrint(p);

break;

case 2:

printf(“\n请输入要查询的姓名:”);

scanf(“%s”,name);

printf(“\n学号 姓名 年龄 性别 系 班 年级 “);

while(p)

{

if(!strcmp(p-sname,name))

LinePrint(p);

p=p-next;

}

break;

case 3:

printf(“\n请输入学生所在的系:”);

scanf(“%s”,departm);

printf(“\n学号 姓名 年龄 性别 系 班 年级 “);

while(p)

{

if(!strcmp(p-depart,departm))

LinePrint(p);

p=p-next;

}

break;

case 4:

printf(“\n请输入学生所在的班:”);

scanf(“%s”,clss);

printf(“\n请输入学生所在的年级:”);

scanf(“%s”,grades);

printf(“\n学号 姓名 年龄 性别 系 班 年级 “);

while(p)

{

if(!strcmp(p-classs,clss)!strcmp(p-grade,grades))

LinePrint(p);

p=p-next;

}

break;

case 5:

printf(“\n请输入学生所在的年级:”);

scanf(“%s”,grades);

printf(“\n学号 姓名 年龄 性别 系 班 年级 “);

while(p)

{

if(!strcmp(p-grade,grades))

LinePrint(p);

p=p-next;

}

break;

case 6:

print();

break;

case 7:

return;

default:

printf(“很抱歉,暂无此查询方式!”);

break;

}

}

}

void modify()//修改学生信息

{

char num[max];

student *p=head;

printf(“\n请输入要修改的学生的学号:”);

scanf(“%s”,num);

while(p)

{

if(!strcmp(p-sno,num))

break;

else

p=p-next;

}

if(p==NULL)

{

printf(“\n错误:没有此学生的信息!\n”);

return;

}

LinePrint(p);

printf(“\n请输入要修改的该学生的信息:”);

printf(“\n1.姓名”);

printf(“\n2.性别”);

printf(“\n3.年龄”);

printf(“\n4.所在的系”);

printf(“\n5.所在的班”);

printf(“\n6.所在的年级”);

char name1[max],sex1[max],age1[max],depart1[max],class1[max],grade1[max];

int select;

fflush(stdin);

scanf(“%d”,select);

printf(“\n请输入新的信息:”);

switch(select)

{

case 1:

scanf(“%s”,name1);

strcpy(p-sname,name1);

break;

case 2:

scanf(“%s”,sex1);

strcpy(p-sex,sex1);

break;

case 3:

scanf(“%s”,age1);

strcpy(p-age,age1);

break;

case 4:

scanf(“%s”,depart1);

strcpy(p-depart,depart1);

break;

case 5:

scanf(“%s”,class1);

strcpy(p-classs,class1);

break;

case 6:

scanf(“%s”,grade1);

strcpy(p-grade,grade1);

break;

default:

printf(“\nError!”);

break;

}

LinePrint(p);

return;

}

void del()// 删除某学生的信息

{

student *p=head,*temp=head,*s;

char num1[max];

printf(“\n请输入要删除的学生的学号:”);

scanf(“%s”,num1);

while(p)//查找该学生所在的结点

{

if(!strcmp(p-sno,num1))

break;

else

{

temp=p;

p=p-next;

}

}//while

if(!p)

{

printf(“\n不存在此学生的信息.”);

return;

}

LinePrint(p);//输出该学生的信息

printf(“\n请问真的要删除该学生的信息吗?(Y/N)”);

char ch;

fflush(stdin);

scanf(“%c”,ch);

if(ch==’Y’||ch==’y’)

{

s=p-next;

temp-next=s;

free(p);

printf(“\n已经删除该学生的信息.”);

}

return;

}

void sort() //排序模块。将学生记录按学号从小到大排列。用起泡排序算法实现

{

student *ptr,*s=head,*p;

int count=0,count1;

while(s)//统计链表结点个数

{

count++;

s=s-next;

}

for(int i=1;icount;i++)

{

ptr=head;

p=NULL;

count1=count-i; //用来控制每轮起泡排序的终点,即每次把学号最小的结点移到倒数第i个结点

while(ptrptr-next(count1–))

{

if(strcmp(ptr-sno,ptr-next-sno)0)

{

s=ptr-next;

ptr-next=s-next;

if(p==NULL) //ptr处于队头时

head=s;

else

p-next=s;

s-next=ptr;

p=s;

}

else

{

ptr=ptr-next;

if(p==NULL) //ptr处于队头时

p=head;

else

p=p-next;

}

}

}

return;

}

void quit()

{

char ch;

printf(“\n真的要退出?(Y/N)”);

fflush(stdin);

scanf(“%c”,ch);

if(ch==’Y’||ch==’y’)

exit(0);

return;

}

int main()

{

int option;

printf(“\nCopyright@2005 KongXinCai All rights reserved.”);

printf(“\n欢迎使用学生信息管理系统!\n”);

//登录模块

int icheck=0;

while(icheck3)

{

if(LogOn()==0)

icheck++;

else

break;

}

if(icheck==3)

{

printf(“\n连续登录三次不成功,退出!”);

exit(0);

}

//系统界面

while(1)

{

printf(“\n\n请选择需要的服务:”);

printf(“\n1.注册”);

printf(“\n2.查询”);

printf(“\n3.修改”);

printf(“\n4.删除”);

printf(“\n5.排序”);

printf(“\n7.求平均”);

printf(“\n6.退出\n”);

scanf(“%d”,option);

switch(option)

{

case 1:

regist();

break;

case 2:

search();

break;

case 3:

modify();

break;

case 4:

del();

break;

case 5:

sort();

break;

case 6:

quit();

break;

}

}

return 0;

}

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月24日 20:04:12
下一篇 2024年3月24日 20:13:08

相关推荐

  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    4000
  • c语言控制代码的换码序列,c语言交换代码

    求C语言编程大神解答一下下面这个编程代码? k==5,用5去除125余0,所以r=125%5中r为0。由于!0为1,所以执行while循环体:先打印出5(k的值),再n=n/k==125/5=25;由于251则再打印出*号。这一循环结果输出是5*。 下面是我的代码,三个函数分别对应三个问题。 在实现基本要求的前提下,拓展了可以从键盘输入的功能,以下为各题代码…

    2024年5月23日
    5600
  • c语言扫描io脚状态,c语言端口扫描

    求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。 单片机怎么计算1s内下降沿的个数的C语言程序或者计算两个下降沿的时间(检测脉冲频率)计算1s内下降沿的个数方法是,一个定时器设置定时1…

    2024年5月23日
    4400
  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4400
  • c语言三位小数,C语言三位小数

    怎样用C++语言输出精确到小数点后三位的数? 1、用C++语言输出精确到小数点后三位的数,可以参考下面给出的代码:coutsetiosflags(ios:fixed)setprecision(3)。其中 setiosflags中set是设置的意思。ios是iostream的缩写,即输入输出流。flags是标志的意思。 2、要精确到小数点后若干位,则数据类型为…

    2024年5月23日
    7300
  • c语言21点游戏,二十一点游戏代码c语言

    如何使用C语言编写简单小游戏? 1、数学知识:长方形的面积S=a*b 长方形周长L=2*(a+b)其中a b分别为长方形的宽和高。算法分析:长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。 2、/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++0、turbo…

    2024年5月23日
    6400
  • c语言当中的null,C语言当中的符号

    C/C++中,NULL和null的区别是什么? nul 和 null要看编译器,不同的编译器有所区别。 所以C或者C++中都使用一个特殊定义NULL表示无效值,其本质就是未定义具体数据类型的0值。 null是是什么都没有的意思。在java中表示空对象。 本意是“空的;元素只有零的”意思。计算机中通常表示空值,无结果,或是空集合。\x0d\x0a在ASCII码…

    2024年5月23日
    4500
  • 包含c语言对txt文件命名的词条

    如何在C语言编程里面修改源文件名字 如果你是在WINDOWS的话,简单了,随便用个编辑器,比如记事本,然后写c源程序,保存到你想要保存的位置。如果你在DOS下,可以用edit,写好以后,按alt键,选择文件菜单,然后保存。 用open打开文件,注意操作模式使用“修改”或者“添加” 用write或者fprintf向文件中写入你的内容。 用close关闭文件。 …

    2024年5月23日
    4900
  • 学c语言编程,学c语言编程用什么软件

    编程开发必须要学C语言吗? 1、要学习。编程开发的学习内容主要包括c语言、python和c+语言。C语言作为一种简单灵活的高级编程语言,它是一个面向过程的语言,一般是作为计算机专业的基础入门语言课程。 2、C语言。对于刚接触编程的人来说,先学习C语言是非常重要的。C语言可以说是是计算机编程语言的鼻祖,其他的编程语言几乎全是由C语言变化衍生出来的。 3、不需要…

    2024年5月23日
    3500
  • c语言用string定义字符串,c语言中用string类型来处理字符串类型

    C++怎样定义定义字符串 1、第一是字符数组来表示字符串。用下面的语句声明:char a[10];C语言中字符数组与字符串的唯一区别是字符串末尾有一个结束符\0,而字符数组不需要。 2、在C中定义字符串有下列几种形式:字符串常量,char数组,char指针 字符串常量 即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为 …

    2024年5月23日
    4300

发表回复

登录后才能评论



关注微信