怎样用C语言写学生成绩管理系统?

Python014

怎样用C语言写学生成绩管理系统?,第1张

程序如下: #include\x0d\x0avoid main()\x0d\x0a{\x0d\x0a float student[100][7]\x0d\x0a//student[][0]存放学号,student[][1]到student[][4]存放四门成绩,\x0d\x0a//student[][5]存放总分,student[][6]存放平均分,student[][7]存放排名\x0d\x0a int n,i,j,k,p,t,count,flag\x0d\x0a int a[100],b[100],c[100]\x0d\x0a//a[]存放排序后的下标,b[]存放总分(备份),c[]存放排名的数据\x0d\x0a printf("输入学生的个数:\n")\x0d\x0a scanf("%d",&n)\x0d\x0a for(i=0ib[i+1])\x0d\x0a{\x0d\x0a c[i]=count\x0d\x0a count++\x0d\x0a}\x0d\x0a }\x0d\x0a printf("\n以下是统计结果:\n")\x0d\x0a printf("学号 s[1]s[2]s[3]s[4] 总分 平均分排名\n")\x0d\x0a for(i=0i 回答于 2022-11-16

代码如下:

#include<stdio.h>

#include<malloc.h>

#include<stdlib.h>

#include<string.h>

#include<conio.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