c语言怎么录入一个学生的成绩
㈠ 用C语言做一个学生成绩管理系统 输入学生人数,录入学生成绩
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
using namespace std;
/*定义学生结构体*/
struct Student
{
char ID[20];
char Name[20];
float Mark1;
float Mark2;
float Mark3;
float Average;
};
/*声明学生数组及学生数量*/
struct Student students[1000];
int num=0;
/*求平均值*/
float Avg(struct Student stu)
{
return (stu.Mark1+stu.Mark2+stu.Mark3)/3;
}
/*通过学号返回数组下标*/
int Student_SearchByIndex(char id[])
{
int i;
for (i=0;i<num;i++)
{
if (strcmp(students[i].ID,id)==0)
{
return i;
}
}
return -1;
}
/*通过姓名返回数组下标*/
int Student_SearchByName(char name[])
{
int i;
for (i=0;i<num;i++)
{
if (strcmp(students[i].Name,name)==0)
{
return i;
}
}
return -1;
}
/*显示单条学生记录*/
void Student_DisplaySingle(int index)
{
printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");
printf("-------------------------------------------------------------\n");
printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,
students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);
}
/*插入学生信息*/
void Student_Insert()
{
while(1)
{
printf("请输入学号:");
scanf("%s",&students[num].ID);
getchar();
printf("请输入姓名:");
scanf("%s",&students[num].Name);
getchar();
printf("请输入成绩:");
scanf("%f",&students[num].Mark1);
getchar();
printf("请输入成绩:");
scanf("%f",&students[num].Mark2);
getchar();
printf("请输入成绩:");
scanf("%f",&students[num].Mark3);
getchar();
students[num].Average=Avg(students[num]);
num++;
printf("是否继续?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
/*修改学生信息*/
void Student_Modify()
{
//float mark1,mark2,mark3;
while(1)
{
char id[20];
int index;
printf("请输入要修改的学生的学号:");
scanf("%s",&id);
getchar();
index=Student_SearchByIndex(id);
if (index==-1)
{
printf("学生不存在!\n");
}
else
{
printf("你要修改的学生信息为:\n");
Student_DisplaySingle(index);
printf("-- 请输入新值--\n");
printf("请输入学号:");
scanf("%s",&students[index].ID);
getchar();
printf("请输入姓名:");
scanf("%s",&students[index].Name);
getchar();
printf("请输入成绩:");
scanf("%f",&students[index].Mark1);
getchar();
printf("请输入成绩:");
scanf("%f",&students[index].Mark2);
getchar();
printf("请输入成绩:");
scanf("%f",&students[index].Mark3);
getchar();
students[index].Average=Avg(students[index]);
}
printf("是否继续?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
/*删除学生信息*/
void Student_Delete()
{
int i;
while(1)
{
char id[20];
int index;
printf("请输入要删除的学生的学号:");
scanf("%s",&id);
getchar();
index=Student_SearchByIndex(id);
if (index==-1)
{
printf("学生不存在!\n");
}
else
{
printf("你要删除的学生信息为:\n");
Student_DisplaySingle(index);
printf("是否真的要删除?(y/n)");
if (getchar()=='y')
{
for (i=index;i<num-1;i++)
{
students[i]=students[i+1];//把后边的对象都向前移动
}
num--;
}
getchar();
}
printf("是否继续?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
/*按姓名查询*/
void Student_Select()
{
while(1)
{
char name[20];
int index;
printf("请输入要查询的学生的姓名:");
scanf("%s",&name);
getchar();
index=Student_SearchByName(name);
if (index==-1)
{
printf("学生不存在!\n");
}
else
{
printf("你要查询的学生信息为:\n");
Student_DisplaySingle(index);
}
printf("是否继续?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
/*按平均值排序*/
void Student_SortByAverage()
{
int i,j;
struct Student tmp;
for (i=0;i<num;i++)
{
for (j=1;j<num-i;j++)
{
if (students[j-1].Average<students[j].Average)
{
tmp=students[j-1];
students[j-1]=students[j];
students[j]=tmp;
}
}
}
}
/*显示学生信息*/
void Student_Display()
{
int i;
printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");
printf("-------------------------------------------------------------\n");
for (i=0;i<num;i++)
{
printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,
students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);
}
}
/*将学生信息从文件读出*/
void IO_ReadInfo()
{
FILE *fp;
int i;
if ((fp=fopen("Database.txt","rb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
if (fread(&num,sizeof(int),1,fp)!=1)
{
num=-1;
}
else
{
for(i=0;i<num;i++)
{
fread(&students[i],sizeof(struct Student),1,fp);
}
}
fclose(fp);
}
/*将学生信息写入文件*/
void IO_WriteInfo()
{
FILE *fp;
int i;
if ((fp=fopen("Database.txt","wb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
if (fwrite(&num,sizeof(int),1,fp)!=1)
{
printf("写入文件错误!\n");
}
for (i=0;i<num;i++)
{
if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)
{
printf("写入文件错误!\n");
}
}
fclose(fp);
}
/*主程序*/
void main()
{
int choice;
IO_ReadInfo();
while(1)
{
/*主菜单*/
printf("\n------ 学生成绩管理系统------\n");
printf("1. 增加学生记录\n");
printf("2. 修改学生记录\n");
printf("3. 删除学生记录\n");
printf("4. 按姓名查询学生记录\n");
printf("5. 按平均成绩排序\n");
printf("6. 退出\n");
printf("请选择(1-6):");
scanf("%d",&choice);
getchar();
switch(choice)
{
case 1:
Student_Insert();
break;
case 2:
Student_Modify();
break;
case 3:
Student_Delete();
break;
case 4:
Student_Select();
break;
case 5:
Student_SortByAverage();
Student_Display();
break;
case 6:
exit(0);
break;
}
IO_WriteInfo();
}
}
㈡ C语言怎么用数组录入3个学生成绩,每个学生有5门课成绩,并统计每个学生的平均分
#include<stdio.h>
#include<math.h>
intmain()
{
floatg[3][5];
for(inti=0;i<3;i++){
printf("请输入第%d个学生的成绩中间用空格分开: ",i+1);
scanf("%f%f%f%f%f",&g[i][0],&g[i][1],&g[i][2],&g[i][3],&g[i][4]);
}
for(inti=0;i<3;i++){
floatavg=0.0;
floatsum=0.0;
for(intj=0;j<5;j++){
sum+=g[i][j];
}
avg=sum/5;
printf("第%d个学生的平均成绩为:%f ",i+1,avg);
}
return0;
}
望采纳,谢谢
㈢ 如何用C语言编一个学生成绩管理系统
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define NULL 0
int shoudsave=0;
struct student
{
char num[10];
char name[20];
char sex[4];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];
};
typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;
void menu()
{
printf("********************************************************************************");
printf("\t1输入学生资料\t\t\t\t\t2删除学生资料\n");
printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n");
printf("\t5显示学生资料\t\t\t\t\t6统计学生成绩\n");
printf("\t7排序学生成绩\t\t\t\t\t8保存学生资料\n");
printf("\t9获取帮助信息\t\t\t\t\t0退出系统\n");
printf("********************************************************************************\n");
}
㈣ 如何用C语言编写一个程序实现学员成绩
这是我写的,或许对你有帮助~
#include<time.h>
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#define MAX 50
void input();
void sort();
void display();
void insert();
void del();
void average();
int now_no=0;
struct student
{
int no;
char name[20];
char sex[4];
float score1;
float score2;
float score3;
float sort;
float ave;
float sum;
};
struct student stu[MAX],*p;
main()//主函数
{
char as;
start: printf("\t\t\t欢迎使用学生成绩管理系统\n\n");
//一下为功能选择模块
do{
printf("\n\t\t\t\t1.录入学员信息\n\t\t\t\t2.显示学员信息\n\t\t\t\t3.成绩排序信息\n\t\t\t\t4.添加学员信息\n\t\t\t\t5.删除学员信息\n\t\t\t\t6.退出\n");
printf("\t\t\t\t选择功能选项:");
as=getch();
switch(as)
{
case '1':
system("cls");
input();
break;
case '2':
system("cls");
display();
break;
case '3':
system("cls");
sort();
break;
case '4':
system("cls");
insert();
break;
case '5':
system("cls");
del();
break;
case '6':
system("exit");
exit(0);
default:
system("cls");
goto start;
}
}while(1);
//至此功能选择结束
}
void input()//原始数据录入模块
{
int i=0;
char ch;
do
{
printf("\t\t\t\t1.录入学员信息\n输入第%d个学员的信息\n",i+1);
printf("\n输入学生编号:");
scanf("%d",&stu[i].no);
fflush(stdin);
printf("\n输入学员姓名:");
fflush(stdin);
gets(stu[i].name);
printf("\n输入学员性别:");
fflush(stdin);
gets(stu[i].sex);
printf("\n输入学员成绩:");
fflush(stdin);
scanf("%f",&stu[i].score1);
printf("\n输入学员成绩:");
fflush(stdin);
scanf("%f",&stu[i].score2);
printf("\n输入学员成绩:");
fflush(stdin);
scanf("%f",&stu[i].score3);
printf("\n\n");
i++;
now_no=i;
printf("%d",now_no);
printf("是否继续输入?(Y/N)");
ch=getch();
system("cls");
}
while(ch!='n');
system("cls");
}
void sort()//排序数据函数
{
struct student temp;
int i,j;
for(i=1;i<now_no;i++)
{
for(j=1;j<=now_no-i;j++)
{
if(stu[j-1].ave<stu[j].ave)
{temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}}}
}
void display()//显示数据函数
{
int i;
char as;
float ave;
do
{
printf("\t\t班级学员信息列表\n");
printf("\t编号\t姓名\t性别\t成绩\t成绩\t成绩\t平均值\n");
for(i=0;i<now_no;i++)
{
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave);
}
printf("\t\t按任意键返回主菜单.");
as=getch();
goto exit;
}
while(as!='n');
exit: system("cls");
}
void insert()//插入数据函数
{
char ch;
do
{
printf("\n\t\t输入新插入学员队信息\n");
printf("\n输入学生编号:");
scanf("%d",&stu[now_no].no);
fflush(stdin);
printf("\n输入学员姓名:");
fflush(stdin);
gets(stu[now_no].name);
printf("\n输入学员性别:");
fflush(stdin);
gets(stu[now_no].sex);
printf("\n输入学员成绩:");
fflush(stdin);
scanf("%f",&stu[now_no].score1);
printf("\n输入学员成绩:");
fflush(stdin);
scanf("%f",&stu[now_no].score2);
printf("\n输入学员成绩:");
fflush(stdin);
scanf("%f",&stu[now_no].score3);
printf("\n\n");
now_no=now_no+1;
sort();
printf("是否继续输入?(Y/N)");
ch=getch();
system("cls");
}
while(ch!='n');
}
void del()//删除数据函数
{
int inum,i,j;
printf("输入要删除学员的编号:");
fflush(stdin);
scanf("%d",&inum);
for(i=0;i<now_no;i++)
{
if(stu[i].no==inum)
{
for(j=i;j<now_no;j++)
{
stu[i]=stu[i+1];
}
now_no=now_no-1;
}
break;
}
system("cls");
}
㈤ 编写一个c语言程序,实现录入学生学号和姓名信息的功能
#include<stdio.h>
#include<stdlib.h>
intmain(void)
{
chars[10];//姓名
intnum;//学号
printf("请输入姓名: ");
gets(s);
printf("请输学号: ");
scanf("%d",&num);
printf("姓名是:%s 学号是:%d ",s,num);
system("pause");
return0;
}
(5)c语言怎么录入一个学生的成绩扩展阅读
c语言建立学生档案
#include<stdio.h>
#include<string.h>
结构学生
{
整数
字符名称[10];
智
intEng;
垫子;
};
//s_number-检索的学号
//numebr-文档已经存储的学号
//按学号查找
布尔搜索(chars_New[],charNew[])
{
如果(strcmp(s_New,New))
{
返回true;//查找成功
}
其他
{
returnfalse;//查找失败
}
}
无效menu()
{
printf(“----------------------------------------------------------- “);
printf(“菜单: ”);
printf(“ 1。建立学生档案 ”);
printf(“ 2。读取所有学生记录 ”);
printf(“ 3。在文件尾添加学生记录 ”);
printf(“ 4。查询学生姓名 ”);
printf(“ 5。结束程序 ”);
printf(“----------------------------------------------------------- “);
}
无效menu_2()
{
printf(“----------------------------------------------------------- “);
printf(“查找选择菜单: ”);
printf(“ 1。按名字查找 ”);
printf(“ 2。按学号查找 ”);
printf(“请选择: ”);
printf(“----------------------------------------------------------- “);
}
intmain()
{
而(1)
{
菜单();
法官
printf(“请输入你的选项:”);
判断=scanf(“%d”,&n);
如果(判断==0)
{
printf(“输入格式错误! ”);
}
开关(n)
{
情况1:
{
FILE*pf=fopen(“Student.txt”,“w+”);
字符标志='Y';
while(flag=='Y'|flag=='y')
{
学生stu;//创建学生结构体
printf(“请输入学生的学号: ”);
scanf(“%d”,&stu.number);
getchar();//吃掉以上一个输入的回车符
printf(“请输入学生的姓名: ”);
scanf(“%s”,stu.name);
printf(“请输入学生的语文成绩: ”);
scanf(“%d”,&stu.Chi);
printf(“请输入学生的英语成绩: ”);
scanf(“%d”,&stu.Eng);
printf(“请输入学生的数学成绩: ”);
scanf(“%d”,&stu.Mat);
//把学生档案导入Student.txt文档
fprintf(pf,“#姓名:%s 学号:%d 语言成绩:%d 英语成绩:%d 数学成绩:%d ”,stu.name,stu.number,stu.Chi,stu.Eng,stu.Mat);
getchar();//吃掉以上一个输入的回车符
printf(“是否继续输入学生档案?(是或否) ”);
判断=scanf(“%c”,&flag);
如果(判断==0)
{
printf(“输入格式错误! ”);
}
}
fclose(pf);
打破;
}
㈥ 【C语言】输入学生姓名和成绩排序
这种一般都是要用到结构体的,不用结构体很难讲名字和成绩这种数据一一对应起来。内
结构体容都是设置一种结构,这个结构中可以放置各个类型的数据,比如说一个人是一个结构体,那么名字,身高,体重,性别,等等都可以作为结构体里的数据。然后用这个结构体来初始化一些人,比如说小明,你将小明的身高,体重,性别等等初始化赋值给这个结构体,就可以使用 . 这个运算符号来调用结构体里成员数据。比如说 小明.姓名 的值就是小明。
根据你的提问,具体代码如下:
首先定义一个结构体的定义:
typedef struct Student
{
char name[20]; //名字
int grade; //成绩
}
初始化各个实例:
struct Student Jack, Tom, Tim;
将各个成员赋值:
Jack.name[20] = Jack;
Jack.grade = 63;
以此类推。
排序的具体方法也不难,自己看看书吧。
使用结构体的好处就是将一组与一个事物相关的数值放在一起,统一的管理和调用。
㈦ c语言 写程序(1)输入十个学生的学号和成绩(2)输入一个学号,查找
#include<stdio.h>
typedefstruct
{
charno[20];
intscore;
}STU;
intmain()
{
STUs[10],t;
charno[20];
inti,j;
for(i=0;i<10;i++)
{
scanf("%s%d",t.no,&t.score);
for(j=i;j>=0;j--)
if(s[j].score<t.score)s[j+1]=s[j];
elsebreak;
s[j+1]=t;
}
for(i=0;i<10;i++)
printf("%s%d ",s[i].no,s[i].score);
printf("输入要查询的学号:");
scanf("%s",no);
for(i=0;i<10;i++)
if(strcmp(s[i].no,no)==0)break;
if(i==10)printf("不在十个学生中 ");
elseprintf("该学生分数为%d ",s[i].score);
return0;
}
㈧ 求怎么用C语言做一个学生成绩管理系统
去年写的,你稍微改下加个成绩就行
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
FILE *fp;
struct student{
char name[10];
char number[12];
char age[3];
struct student *next;
};
struct student *creat(); //手动创建链表
struct student *build_list(); //从文件读取信息创建链表
void read_list(struct student *head); //打印链表
void search(struct student *head); //查找相应信息
struct student *delete_(struct student *head); //删除相应信息
void ad_list(struct student *head); //增加信息
int control(struct student *head); //控制函数
void head_print(); //打印界面函数
void change_list(struct student *head); //更改链表信息函数
void save(struct student *head); //保存文件
void remove(struct student *head); //递归释放链表空间
char name[10],number[12],age[3]; //学生姓名、学号、年龄全局变量
int main(){
struct student *head;
head=(struct student*)malloc(sizeof(struct student));
control(head);
free(head);
fclose(fp);
return 0;
}
struct student *creat(){
struct student *head;
char name[10],number[12],age[3];
struct student *p,*r,*p1;
head=(struct student *)malloc(sizeof(struct student));
p=head->next;
r=head;
printf("依次输入姓名学号年龄(按q退出):\n");
scanf("%s",name);
while(name[0]!='q'){
p1=(struct student*)malloc(sizeof(struct student));
scanf("%s",number);
scanf("%s",age);
strcpy(p1->name,name);
strcpy(p1->number,number);
strcpy(p1->age,age);
p1->next=NULL;
r->next=p1;
r=p1;
scanf("%s",name);
}
printf("建立成功\n");
return head;
}
/*若无文件或文件为空,用链表创建函数,为防止占用多余内存在循环入口处进行判断,函数返回头指针地址*/
struct student *build_list(){
char ch;
struct student *head;
struct student *p1,*r;
rewind(fp);
head=(struct student*)malloc(sizeof(struct student));
r=head;
while(!feof(fp)){
p1=(struct student*)malloc(sizeof(struct student));
fscanf(fp,"%s%s%s",p1->name,p1->number,p1->age);
p1->next=NULL;
r->next=p1;
r=p1;
fseek(fp,2L,SEEK_CUR);
if((ch=getc(fp))==EOF)
break;
else
fseek(fp,-3L,SEEK_CUR);
}
return head;
}
/*文件内有信息时按行读取文件信息并创建链表,为防止误读结尾换行符,用fseek函数在每次循环后移两单位判断是否为空
,若为空结束循环,若不为空则用fseek函数前移三个单位*/
void read_list(struct student *head){
struct student *p;
p=head->next;
if(p==NULL){
head=creat();
}
printf("*******************************************\n");
while(p!=NULL){
printf("%-20s%-12s%-3s\n",p->name,p->number,p->age);
p=p->next;
}
printf("*******************************************\n");
}
/*输出链表信息,如果进行删除操作后链表为空则转到链表创建函数;按行读取文件信息并输出。*/
void search(struct student *head){
char s[20];
struct student *p;
int k=0;
printf("请输入要查询的字符串:\n");
p=head->next;
scanf("%s",s);
printf("查询结果:\n");
while(p!=NULL){
if((strcmp(s,p->age)&&strcmp(s,p->name)&&strcmp(s,p->number))==0){
printf("%-20s%-12s%-3s\n",p->name,p->number,p->age);
k=1;
}
p=p->next;
}
if(k==0)
printf("无记录\n");
}
/*查找函数,*/
struct student *delete_(struct student *head){
char s[20];
char ch;
int v=0;
struct student *p,*q;
printf("请输入要删除的学生的学号:\n");
scanf("%s",s);
p=head->next;
q=head;
while(p!=NULL){
if(strcmp(s,p->number)==0){
q->next=p->next;
v=1;
free(p);
break;
}
q=p;
p=p->next;
}
if(v==1)
printf("删除成功\n");
else{
printf("未删除成功\n");
return q->next;
}
if(head->next==NULL){
printf("已无信息,是否输入新的(Y/N):\n");
scanf("%c",&ch);
ch=getchar();
if(ch=='y')
head=creat();
return head;
}
return q->next;
}
void ad_list(struct student *head){
char s[20];
int v=0;
struct student *p,*q;
q=(struct student *)malloc(sizeof(struct student));
p=head->next;
printf("插在学号为多少的学生后?\n");
scanf("%s",s);
while(p!=NULL){
if(strcmp(s,p->number)==0){
printf("请输入学生信息(姓名 学号 年龄):\n");
scanf("%s%s%s",q->name,q->number,q->age);
q->next=p->next;
p->next=q;
v=1;
break;
}
p=p->next;
}
if(v==0)
printf("插入失败\n");
}
void change_list(struct student *head){
char s1[12];
char ch;
struct student *p;
printf("请输入要更改的学生的学号:\n");
scanf("%s",s1);
p=head->next;
while(p!=NULL){
if(strcmp(s1,p->number)==0)
break;
p=p->next;
}
printf("请输入要更改的内容:\na.姓名\nb.学号\nc.年龄\n");
scanf("%c",&ch);
ch=getchar();
printf("请输入更改后结果:\n");
scanf("%s",s1);
switch(ch){
case'a':strcpy(p->name,s1);break;
case'b':strcpy(p->number,s1);break;
case'c':strcpy(p->age,s1);break;
}
}
void save(struct student *head){
struct student *p;
p=head->next;
fp=fopen("stu.out","w+");
rewind(fp);
while(p!=NULL){
fprintf(fp,"%-20s%-12s%3s\n",p->name,p->number,p->age);
p=p->next;
}
printf("保存成功\n");
}
void remove(struct student *head){
if(head==NULL)
return;
remove(head->next);
free(head);
}
int control(struct student *head){
int i=0;
char ch;
head_print();
if((fp=fopen("stu.out","r"))==NULL){
printf("无文件,请先建立:\n");
head=creat();
}
else if((ch=getc(fp))==EOF){
printf("无信息,请先建立:\n");
head=creat();
}
else
head=build_list();
while((ch=getchar())!='q'){
switch(ch){
case'a':search(head);break;
case'b':delete_(head);break;
case'c':ad_list(head);break;
case'd':change_list(head);break;
case'e':read_list(head);break;
case'f':save(head);break;
case'h':head_print();
}
}
if(ch=='q')
remove(head);
return 0;
}
void head_print(){
printf("%13.0s********************************************%13.0s\n");
printf("%13.0s**%40.0s**\n");
printf("%13.0s**%9.0sa.查找%9.0sb.删除%10.0s**\n");
printf("%13.0s**%40.0s**\n");
printf("%13.0s**%9.0sc.增加%9.0sd.更改%10.0s**\n");
printf("%13.0s**%40.0s**\n");
printf("%13.0s**%9.0se.查看%9.0sf.存档%10.0s**\n");
printf("%13.0s**%40.0s**\n");
printf("%13.0s**%9.0s按h显示提示信息,q退出%10.0s**\n");
printf("%13.0s********************************************%13.0s\n");
}
㈨ c语言如何编写一个输出学生成绩等级的程序
一、首先打开VC++
㈩ 用c语言设计一个学生成绩管理系统 该系统要实现的功能为:成绩录入:输入学生的学号、姓名及三门课成绩
我只有差不多的你可以自己改一改
/* ************************************************************************
* Filename: student_system.c
* Description:
* Version: 1.0
* Created: 2016年03月30日 17时27分11秒
* Revision: none
* Compiler: gcc
* Author: YOUR NAME (),
* Company:
* ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
typedef struct stu
{
int num;
char name[20];
int score;
struct stu *next;
}STU;
void link_add_end(STU **head,STU *p_new)
{
p_new->next = *head;
*head = p_new;
}
void link_print(STU **head)
{
if(*head == NULL)
{
return;
}
STU *p_mov = *head;
while(p_mov != NULL)
{
printf("num==%d score==%d name==%s ",p_mov->num,p_mov->score,p_mov->name);
p_mov=p_mov->next;
}
}
void link_find_num(STU **head,int num)
{
STU *p_mov = *head;
while(p_mov != NULL)
{
if(p_mov->num == num)
{
printf("num==%d score==%d name==%s ",p_mov->num,p_mov->score,p_mov->name);
}
p_mov=p_mov->next;
}
}
void link_find_name(STU **head,char name[])
{
STU *p_mov = *head;
while(p_mov != NULL)
{
if(strcmp(p_mov->name,name)==0)
{
printf("num==%d score==%d name==%s ",p_mov->num,p_mov->score,p_mov->name);
}
p_mov=p_mov->next;
}
}
void link_delete_num(STU **head,int num)
{
STU *p_mov = *head;
STU *p_sav = p_mov;
while(p_mov != NULL)
{
if(p_mov->num == num)
{
if(p_mov == *head)
{
*head = p_mov->next;
free(p_mov);
}else if(p_mov->next == NULL)
{
p_sav->next=NULL;
free(p_mov);
}else
{
p_sav->next=p_mov->next;
free(p_mov);
}
}
p_sav=p_mov;
p_mov=p_mov->next;
}
}
void add(STU **head)
{
STU *p_new;
p_new = (STU *)malloc(sizeof(STU));
printf("请输入 学号 分数 姓名 ");
printf("例如 1 99 张三 ");
scanf("%d %d %s",&p_new->num,&p_new->score,p_new->name);
getchar();
link_add_end(head,p_new);
}
void prin(STU **head)
{
link_print(head);
}
void find(STU **head)
{
int num;
char name[20];
char cmd[20];
printf("1 find for num ");
printf("2 find for name ");
gets(cmd);
if(strcmp("1",cmd) == 0)
{
printf("please input find for num");
scanf("%d",&num);
getchar();
link_find_num(head,num);
}else if(strcmp("2",cmd)==0)
{
printf("please input find for name ");
gets(name);
link_find_name(head,name);
}else
{
printf("error!!");
return;
}
}
void delete(STU **head)
{
int num;
printf("please input delete for num ");
scanf("%d",&num);
getchar();
link_delete_num(head,num);
}
void help()
{
printf("************************ ");
printf("*add add link * ");
printf("*prt print link * ");
printf("*fid find link * ");
printf("*del delete link * ");
printf("*help print help * ");
printf("************************ ");
}
int main(int argc, char *argv[])
{
char cmd_key[20];
STU *head=NULL;
int i;
typedef void (*FUN)(STU **);
typedef struct cmd_fun
{
char key_cmd[20];
FUN fun;
}CMD;
CMD cmd[]={{"add",add},
{"prt",prin},
{"fid",find},
{"del",delete}};
help();
while(1)
{
gets(cmd_key);
if(strcmp(cmd_key,"help")==0)
{
help();
}
for(i=0; i<4; i++)
{
if(strcmp(cmd[i].key_cmd,cmd_key)==0)
{
cmd[i].fun(&head);
}
}
}
return 0;
}