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

Python016

c语言学生信息管理系统代码,第1张

代码如下:

#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

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

//链表结点结构体声明

typedef struct subjects

{

char name[20]

float score

}sub

typedef struct student

{

int num

char name[20]

sub  subject[3]

struct student* next

}stu,*pstu

#define SIZE sizeof(stu)

//函数申明

pstu LoadInfo()

void PrintMenu()

pstu AddStu(pstu )

pstu DeleStu(pstu )

pstu RwrStu(pstu )

void FindStu(pstu , char )

void Count(pstu ,char * ,float ,float )

void Rank(pstu ,char * )

void SaveQuit(pstu )

//创建菜单,进入选择循环

while(1)

{

PrintMenu()

printf("请输入您的选择编号:")

scanf("%d",&n)

getchar()                   

switch(n)

{

case 1:

{

system("cls")           

j=0

while(4!=j)       

{

printf("欢迎进入信息管理版块!\n\n")

printf("\025 1、添加学生\n")

printf("\025 2、删除学生\n")

printf("\025 3、修改学生信息\n")

printf("\025 4、返回\n")

printf("请输入您的选择编号:\n")

scanf("%d",&j)

getchar()

if     ( 1 == j) head = AddStu(head)     

else if( 2 == j) head = DeleStu(head)   

else if( 3 == j) head = RwrStu(head)     

else if( 4 == j)

else printf("输入有误,请重新输入!\n")

}

case 2:

{

//信息查询

system("cls")

printf("欢迎进入信息查询版块!\n")

printf("请输入要查询的学生编号:")

scanf("%d",&j)

getchar()

//printf("%d\n",j)          //检测输入是否成功,调试程序用

FindStu(head,j)            //查询并输出

printf("\n请输入回车键返回主菜单!")

getchar()

system("cls")

break

}

扩展资料:

C语言包含的各种控制语句仅有9种,关键字也只有32 个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。

实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。

参考资料来源:百度百科-c语言

/*好吧,其实你可以上网看看,那么多的,你可以自己修改下*/

#include <stdio.h>

#include <malloc.h>

#include <string.h>

#include <stdlib.h>

#define NULL 0

#define LEN sizeof(struct student)

struct student

{

char name[20]

long int num

char sex[4]

int age

char address[30]

double tele_num

char aihao[20]

struct student *next

}//定义一个结构题

int TOTAL_NUM = 0//学生总数

struct student *head = NULL

void welcome ()//欢迎界面

void mainmenu ()//主界面

void record ()//记录数据

void insert(struct student *stu)//插入数据

void display(struct student *stu)//显示一个学生的信息

void displayAll ()//显示所有学生的信息

void query_by_num ()//按学号查询学生信息

void readData ()//读取文件里学生的信息

void writeData ()//向文件写入学生信息

void freeAll ()//清空链表内容

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

void change ()//更改学生信息

void devise (struct student *p)//选择更改内容

int main (void)

{

welcome ()

//显示主菜单

mainmenu ()

return 0

}

//显示欢迎信息

void welcome ()

{

printf ("+----------------------------------------------------+\n")

printf ("||\n")

printf ("| 欢迎使用网络工程学院信息安全092班学生信息管理系统 |\n")

printf ("||\n")

printf ("+----------------------------------------------------+\n")

}

//系统主菜单

void mainmenu ()

{

int choice

choice = -1

readData ()

printf ("\n温馨提示:为保证您的操作得到保存,请按正常顺序退出系统^_^\n")

do

{

printf ("\n\n\n")

printf ("\t\t\t--------------------------------------------\n")

printf ("\t\t\t+信息安全092班学生信息管理系统 |\n")

printf ("\t\t\t--------------------------------------------\n")

printf ("\t\t\t+[1]----录入学生信息|\n")

printf ("\t\t\t+[2]----浏览学生信息|\n")

printf ("\t\t\t+[3]----查询学生信息|\n")

printf ("\t\t\t+[4]----删除学生信息|\n")

printf ("\t\t\t+[5]----修改学生信息|\n")

printf ("\t\t\t+[0]----退出系统|\n")

printf ("\t\t\t+*·*·*·*·*·*·*·*·*·*·*·*·*·*·*|\n")

printf ("\t\t\t--------------------------------------------\n")

printf ("请输入您的选择:")

scanf ("%d", &choice)

switch (choice)

{

case 0:

writeData ()

freeAll ()

exit (0)

case 1:

record ()

break

case 2:

displayAll ()

break

case 3:

query_by_num ()

break

case 4:

del ()

break

case 5:

change ()

break

default:

printf ("\n无效选项!")

break

}

}

while (choice != 0)

}

//录入学生信息

void record ()

{

struct student *p0

p0 = (struct student *)malloc(LEN)

printf ("请输入学生的姓名:")

scanf ("%s",p0->name)

printf ("请输入学生的学号:")

scanf ("%ld",&p0->num)

printf ("请输入学生的性别:")

scanf ("%s",p0->sex)

printf ("请输入学生的年龄:")

scanf ("%d",&p0->age)

printf ("请输入学生的地址:")

scanf ("%s",p0->address)

printf ("请输入学生的电话:")

scanf ("%lf",&p0->tele_num)

printf ("请输入学生的爱好:")

scanf ("%s",p0->aihao)

insert (p0)

printf ("该学生的信息为:\n")

printf ("-------------------------------------------------------------------------------\n")

printf ("姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n")

display (p0)

}

void insert (struct student *stu)

{

struct student *p0, *p1, *p2

p1 = head

p0 = stu

if (head == NULL)

{

head = p0

p0->next = NULL

}

else

{

while ((p0->num >p1->num)&&(p1->next != NULL))

{

p2 = p1

p1 = p1->next

}

if (p0->num <= p1->num)

{

if (head == p1)

head = p0

else

p2->next = p0

p0->next = p1

}

else

{

p1->next = p0

p0->next = NULL

}

}

TOTAL_NUM++

}

void display (struct student *p)

{

printf ("%s\t%ld\t%d\t%s\t%s\t\t%.0f\t%s\n", p->name, p->num, p->age, p->sex, p->address, p->tele_num, p->aihao)

}

//浏览学生信息

void displayAll()

{

struct student *p

printf("学生总数:%d\n", TOTAL_NUM)

p = head

if (head != NULL)

{

printf("\n姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n")

printf("-------------------------------------------------------------------------------\n")

do

{

display(p)

p = p->next

}

while(p != NULL)

}

printf ("\n")

}

//按学号查询学生信息

void query_by_num ()

{

int num

struct student *p1

printf("请输入学生的学号:")

scanf("%ld", &num)

if(head==NULL)

{

printf("无学生记录!\n")

return

}

p1 = head

while (num!=p1->num &&p1->next!=NULL)

p1 = p1->next

if (num == p1->num)

{

printf ("姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n")

printf ("-------------------------------------------------------------------------------\n")

display (p1)

}

else

printf ("没有该学生记录,请核对!")

}

//写入文件

void writeData ()

{

FILE* fp//文件指针

struct student *p

fp = fopen("1.txt", "w")

if (!fp)

{

printf("文件打开错误!")

return

}

fprintf(fp,"%d\n", TOTAL_NUM)

for(p = headp!= NULLp= p->next)

{

fprintf(fp,"%s\t%ld\t%s\t%d\t%s\t%.0f\t%s\n", p->name, p->num, p->sex, p->age, p->address, p->tele_num, p->aihao)

}

fclose (fp)

}

void freeAll ()

{

struct student *p1, *p2

p1 = p2=head

while(p1)

{

p2=p1->next

free (p1)

p1 = p2

}

}

//读取文件

void readData ()

{

FILE* fp//文件指针

struct student *p1, *p2

fp = fopen("1.txt", "r")

if (!fp)

{

printf("文件打开错误!")

return

}

fscanf(fp,"%d\n", &TOTAL_NUM)

head = p1 = p2 = (struct student *)malloc(LEN)

fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao)

while(!feof(fp))

{

p1 = (struct student *)malloc(LEN)

fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao)

p2->next = p1

p2 = p1

}

p2->next = NULL

fclose(fp)

}

//删除学生信息

void del ()

{

struct student *p1, *p2

long int num

if (head == NULL)

{

printf("无学生记录!\n")

return

}

printf("请输入您要删除的学生的学号:")

scanf("%ld", &num)

p1 = head

while (num != p1->num &&p1->next != NULL)

{

p2 = p1

p1 = p1->next

}

if(num == p1->num)

{

if(p1 == head)

head = p1->next

else p2->next = p1->next

free(p1)

TOTAL_NUM--

}

else

printf("没有该学生记录,请核对!\n")

}

//修改学生信息

void change ()

{

struct student *p1, *p2

long int num

if (head == NULL)

{

printf ("无学生记录!\n")

return

}

printf ("请输入您要修改的学生的学号:")

scanf ("%ld", &num)

p1 = head

while (num != p1->num &&p1->next != NULL)

{

p2 = p1

p1 = p1->next

}

if(num == p1->num)

devise (p1)

else

printf("没有该学生记录,请核对!\n")

}

void devise (struct student *p)

{

int choice

choice = -1

do

{

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("| 取消 请按 0 |\n")

printf("+----------------------+\n")

printf("请输入您的选择:")

scanf("%d", &choice)

switch (choice)

{

case 0:

return

case 1:

printf("请输入新姓名:")

scanf("%s", p->name)

break

case 2:

printf("请输入新学号:")

scanf("%d", &p->num)

break

case 3:

printf("请输入新性别:")

scanf("%s", p->sex)

break

case 4:

printf("请输入新年龄:")

scanf("%s", &p->age)

break

case 5:

printf("请输入新地址:")

scanf("%s", p->address)

break

case 6:

printf("请输入新电话:")

scanf("%lf", &p->tele_num)

break

case 7:

printf("请输入新爱好:")

scanf("%s", p->aihao)

break

default:

printf("\n无效选项!")

break

}

}

while(choice != 0)

}