用c语言实现一个简单的学生成绩管理系统,包括:学号,姓名,科目,成绩
已调通,大致功能相当
#include
#include /*其它说明*/
#include /*字符串函数*/
#include
#define LEN sizeof(STUDENT)
typedef struct stu /*定义结构体数组用于缓存数据*/
{
char num[6];
char name[5];
int score[3];
int sum;
float average;
int order;
struct stu *next;
}STUDENT;
/*初始化函数*/
STUDENT *Init()
{
return NULL; /*返回空指针*/
}
/*菜单选择函数*/
int Menu_Select()
{
int n;
struct tm *pt; /*定义时间结构体*/
time_t t;
t=time(NULL);
pt=localtime(&t); /*读取系统日期并把它放到结构体中*/
printf("
按任一键进入主菜单......
"); /*按任一键进入主菜单*/
//getch(); /*从键盘读取一个字符,但不显示于屏幕*/
system("pause");
system("cls"); /*清屏*/
printf("********************************************************************************
");
printf(" 欢迎 Welcome to
");
printf("
使用学生管理系统1.0
");
printf("*************************************MENU***************************************
");
printf("1. 输入学生成绩记录 Enter the record
"); /*输入学生成绩记录*/
printf("2. 显示 Print the record
"); /*显示*/
printf("3. 寻找 Search record on name
"); /*寻找*/
printf("4. 删除 Delete a record
"); /*删除*/
printf("5. 排序 Sort to make New a file
"); /*排序*/
printf("6. 插入 Insert record to list
"); /*插入*/
printf("7. 保存 Save the file
"); /*保存*/
printf("8. 读取 Load the file
"); /*读取*/
printf("9. 退出 Quit
"); /*退出*/
printf("
********************************************************************************
");
printf("当前系统日期:%d-%d-%d
",pt->tm_year+1900,pt->tm_mon+1,pt->tm_mday); /*显示当前系统日期*/
do
{
printf("
输入你的选择Enter your choice(1~9):");
fflush(stdin);
scanf("%d",&n);
}while(n9); /*如果选择项不在1~9之间则重输*/
return(n); /*返回选择项,主函数根据该数调用相应的函数*/
}
/*输入函数*/
STUDENT *Create()
{
int i,s;
STUDENT *head=NULL,*p; /* 定义函数.此函数带回一个指向链表头的指针*/
system("cls");
for(;;)
{
p=(STUDENT *)malloc(LEN); /*开辟一个新的单元*/
if(!p) /*如果指针p为空*/
{
printf("
输出内存溢出. Out of memory."); /*输出内存溢出*/
return (head); /*返回头指针,下同*/
}
printf("输入学号Enter the num(0:list end):");
scanf("%s",p->num);
if(p->num[0]=='0') break; /*如果学号首字符为0则结束输入*/
printf("输入名字Enter the name:");
scanf("%s",p->name);
printf("请输入3门成绩Please enter the %d scores
",3); /*提示开始输入成绩*/
s=0; /*计算每个学生的总分,初值为0*/
for(i=0;i<3;i++) /*3门课程循环3次*/
{
do
{
printf("成绩score%d:",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]score[i]>100) /*确保成绩在0~100之间*/
printf("数据错误,请重新输入 Data error,please enter again.
");
}while(p->score[i]score[i]>100);
s=s+p->score[i]; /*累加各门成绩*/
}
p->sum=s; /*将总分保存*/
p->average=(float)s/3; /*先用强制类型转换将s转换成float型,再求平均值*/
p->order=0; /*未排序前此值为0*/
p->next=head; /*将头结点做为新输入结点的后继结点*/
head=p; /*新输入结点为新的头结点*/
}
return(head);
}
/* 显示全部记录函数*/
void Print(STUDENT *head)
{
int i=0; /* 统计记录条数*/
STUDENT *p; /*移动指针*/
system("cls");
p=head; /*初值为头指针*/
printf("
************************************STUDENT************************************
");
printf("-------------------------------------------------------------------------------
");
printf("| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |
");
printf("-------------------------------------------------------------------------------
");
while(p!=NULL)
{
i++;
printf("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|
",
i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("-------------------------------------------------------------------------------
");
printf("**************************************END**************************************
");
}
/*查找记录函数*/
void Search(STUDENT *head)
{
STUDENT *p; /* 移动指针*/
char s[5]; /*存放姓名用的字符数组*/
system("cls");
printf("请输入个姓名来查找. Please enter name for searching.
");
scanf("%s",s);
p=head; /*将头指针赋给p*/
while(strcmp(p->name,s) && p != NULL) /*当记录的姓名不是要找的,或指针不为空时*/
p=p->next; /*移动指针,指向下一结点*/
if(p!=NULL) /*如果指针不为空*/
{
printf("
*************************************FOUND************************************
");
printf("-------------------------------------------------------------------------------
");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |
");
printf("-------------------------------------------------------------------------------
");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|
",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("-------------------------------------------------------------------------------
");
printf("***************************************END**************************************
");
}
else
printf("
没有该学生 There is no num %s student on the list.
",s); /*显示没有该学生*/
}
/*删除记录函数*/
STUDENT *Delete(STUDENT *head)
{
//int n;
STUDENT *p1,*p2; /*p1为查找到要删除的结点指针,p2为其前驱指针*/
char c,s[6]; /*s[6]用来存放学号,c用来输入字母*/
system("cls");
printf("请输入要删除的学号 Please enter the Deleted num: ");
scanf("%s",s);
p1=p2=head; /*给p1和p2赋初值头指针*/
while(strcmp(p1->num,s) && p1 != NULL) /*当记录的学号不是要找的,或指针不为空时*/
{
p2=p1; /*将p1指针值赋给p2作为p1的前驱指针*/
p1=p1->next; /*将p1指针指向下一条记录*/
}
if(strcmp(p1->num,s)==0) /*学号找到了*/
{
printf("**************************************FOUND************************************
");
printf("-------------------------------------------------------------------------------
");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |
");
printf("-------------------------------------------------------------------------------
");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|
",
p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);
printf("-------------------------------------------------------------------------------
");
printf("***************************************END**************************************
");
printf("
是否要删除,输入Y删除,N则退出
Are you sure to Delete the student Y/N ?"); /*提示是否要删除,输入Y删除,N则退出*/
for(;;)
{
scanf("%c",&c);
if(c=='n'||c=='N') break; /*如果不删除,则跳出本循环*/
if(c=='y'||c=='Y')
{
if(p1==head) /*若p1==head,说明被删结点是首结点*/
head=p1->next; /*把第二个结点地址赋予head*/
else
p2->next=p1->next; /*否则将一下结点地址赋给前一结点地址*/
//n=n-1;
printf("
学号为(Num): %s 学生以被删除(student have been Deleted.)
",s);
printf("别忘了保存. Don't forget to Save.
");break; /*删除后就跳出循环*/
}
}
}
else
printf("
没有这个学生在表上
There is no num %s student on the list.
",s); /*找不到该结点*/
return(head);
}
/*排序函数*/
STUDENT *Sort(STUDENT *head)
{
int i=0; /*保存名次*/
STUDENT *p1,*p2,*t,*temp; /*定义临时指针*/
temp=head->next; /*将原表的头指针所指的下一个结点作头指针*/
head->next=NULL; /*第一个结点为新表的头结点*/
while(temp!=NULL) /*当原表不为空时,进行排序*/
{
t=temp; /*取原表的头结点*/
temp=temp->next; /*原表头结点指针后移*/
p1=head; /*设定移动指针p1,从头指针开始*/
p2=head; /*设定移动指针p2做为p1的前驱,初值为头指针*/
while(t->averageaverage&&p1!=NULL) /*作成绩平均分比较*/
{
p2=p1; /*待排序点值小,则新表指针后移*/
p1=p1->next;
}
if(p1==p2) /*p1==p2,说明待排序点值大,应排在首位*/
{
t->next=p1; /*待排序点的后继为p*/
head=t; /*新头结点为待排序点*/
}
else /*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/
{
t->next=p1; /*t的后继是p1*/
p2->next=t; /*p2的后继是t*/
}
}
p1=head; /*已排好序的头指针赋给p1,准备填写名次*/
while(p1!=NULL) /*当p1不为空时,进行下列操作*/
{
i++; /*结点序号*/
p1->order=i; /*将结点序号赋值给名次*/
p1=p1->next; /*指针后移*/
}
printf("排序成功 Sorting is sucessful.
"); /*排序成功*/
return (head);
}
/*插入记录函数*/
STUDENT *Insert(STUDENT *head,STUDENT *New)
{
STUDENT *p0,*p1,*p2;
//int n;
int sum1,i;
p1=head; /*使p1指向第一个结点*/
p0=New; /*p0指向要插入的结点*/
printf("
Please enter a New record.
"); /*提示输入记录信息*/
printf("输入学号Enter the num:");
scanf("%s",New->num);
printf("输入名字Enter the name:");
scanf("%s",New->name);
printf("Please enter the %d scores.
",3);
sum1=0; /*保存新记录的总分,初值为0*/
for(i=0;i<3;i++)
{
do
{
printf("成绩score%d:",i+1);
scanf("%d",&New->score[i]);
if(New->score[i]>100||New->score[i]<0)
printf("数据错误Data error,please enter again.
");
}while(New->score[i]>100||New->score[i]<0);
sum1=sum1+New->score[i]; /*累加各门成绩*/
}
New->sum=sum1; /*将总分存入新记录中*/
New->average=(float)sum1/3;
New->order=0;
if(head==NULL) /*原来的链表是空表*/
{
head=p0;
p0->next=NULL;
} /*使p0指向的结点作为头结点*/
else
{
while((p0->averageaverage)&&(p1->next!=NULL))
{
p2=p1; /*使p2指向刚才p1指向的结点*/
p1=p1->next; /*p1后移一个结点*/
}
if(p0->average>=p1->average)
{
if(head==p1)head=p0; /*插到原来第一个结点之前*/
else p2->next=p0; /*插到p2指向的结点之后*/
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
} /*插到最后的结点之后*/
}
//n=n+1; /*结点数加1*/
head=Sort(head); /*调用排序的函数,将学生成绩重新排序*/
printf("
学生Student %s 已被更新have been inserted.
",New->name);
printf("不要忘了保存Don't forget to Save the New file.
");
return(head);
}
/*保存数据到文件函数*/
void Save(STUDENT *head)
{
FILE *fp; /*定义指向文件的指针*/
STUDENT *p; /* 定义移动指针*/
char outfile[10];
printf("输出文件例如:c:\\score Enter outfile name,for example c:\\score
");
scanf("%s",outfile);
if((fp=fopen(outfile,"w"))==NULL) /*为输出打开一个二进制文件,为只写方式*/
{
printf("打不开文件Cannot open the file
");
return; /*若打不开则返回菜单*/
}
printf("
保存中...Saving the file......
");
p=head; /*移动指针从头指针开始*/
while(p!=NULL) /*如p不为空*/
{
fwrite(p,LEN,1,fp); /*写入一条记录*/
p=p->next; /*指针后移*/
}
fclose(fp); /*关闭文件*/
printf("保存成功....Save the file successfully!
");
}
/* 从文件读数据函数*/
STUDENT *Load()
{
STUDENT *p1,*p2,*head=NULL; /*定义记录指针变量*/
FILE *fp; /* 定义指向文件的指针*/
char infile[10];
printf("倒入文件例如:c:\\score Enter infile name,for example c:\\score
");
scanf("%s",infile);
if((fp=fopen(infile,"r"))==NULL) /*打开一个二进制文件,为只读方式*/
{
printf("打不开文件Can not open the file.
");
return(head);
}
printf("
寻找文件...Loading the file!
");
p1=(STUDENT *)malloc(LEN); /*开辟一个新单元*/
if(!p1)
{
printf("内存溢出!Out of memory!
");
return(head);
}
head=p1; /*申请到空间,将其作为头指针*/
while(!feof(fp)) /*循环读数据直到文件尾结束*/
{
if(fread(p1,LEN,1,fp)!=1) break; /*如果没读到数据,跳出循环*/
p1->next=(STUDENT *)malloc(LEN); /*为下一个结点开辟空间*/
if(!p1->next)
{
printf("Out of memory!
");
return (head);
}
p2=p1; /*使p2指向刚才p1指向的结点*/
p1=p1->next; /*指针后移,新读入数据链到当前表尾*/
}
p2->next=NULL; /*最后一个结点的后继指针为空*/
fclose(fp);
printf("
你成功的从文件中读取了数据!
You have success to read data from the file!
");
return (head);
}
/*主函数界面*/
int main()
{
STUDENT *head,New;
head=Init(); //链表初始化,使head的值为NULL
for(;;) //循环无限次
{
switch(Menu_Select())
{
case 1:head=Create();break;
case 2:Print(head);break;
case 3:Search(head);break;
case 4:head=Delete(head);break;
case 5:head=Sort(head);break;
case 6:head=Insert(head,&New);break; //&New表示返回地址
case 7:Save(head);break;
case 8:head=Load(); break;
case 9:exit(0); //如菜单返回值为9则程序结束
}
}
return 0;
}
你好! 两个题目,你要完成哪一个呢?
//用字符界面实现,比如按数字1,可以录入学生所有信息;
//按数字2,显示所有学生成绩;
//按数字3,进入查询,按学号或姓名查询该学生是否存在,如果存在显示他的所有信息,///否则给出不存在提示。
#include <stdio.h>
struct student
{
char num[6]; /*学号*/
char name[10];
char subject[20]; /*科目*/
float grade;
}stu[10];
void menu()
{
printf("====================================
");
printf("| 学生成绩管理系统 |
");
printf("| 1 输入学生成绩 |
");
printf("| 2 输出学生成绩 |
");
printf("| 3 查询学生成绩 |
");
printf("| 0 退出管理系统 |
");
printf("====================================
");
}
void input()
{
for(int i=0;i<10;i++)
scanf("%s%s%s%f",stu[i].num,stu[i].name,stu[i].subject,&stu[i].grade);
}
void show()
{
printf("学号姓名科目成绩
");
for(int i=0;i<10;i++)
printf("%s%s%s%f
",stu[i].num,stu[i].name,stu[i].subject,stu[i].grade);
}
void serach()
{
char obj[10];
printf("输入要查询的学号");
scanf("%s",obj);
for(int i=0;i<10;i++)
{
if(strcmp(obj,stu[i].num))
{
printf("学号姓名科目成绩
");
printf("%s%s%s%f
",stu[i].num,stu[i].name,stu[i].subject,stu[i].grade);
}
}
}
int main()
{
int selection;
while(true)
{
clrscr();
menu();
printf("请选择0--3: ");
scanf("%d",&selection);
switch(selection)
{
case 1: input();break;
case 2: show();break;
case 3: search();break;
case 0: exit(0);break;
default: printf("错误的输入,请重新输入:");
}
}
return 0;
}
你这都可以当小课设来做了,淘宝上可能要卖10元以上(还要看有没有人接= =),你这分数。。。如果有人给你了,谢谢他吧。。。
我的被我删了,不想再写了
如何用c语言编写一个程序,实现按从大到小的顺序排序输出10个数
用选择排序法编写c语言,实现从键盘上输入10个数,按从大到小的顺序排序输出。代码如下:include<stdio.h> int main(){ int i,j,a[10],t;printf("输入数");for (i = 0; i < 10; i++)scanf("%d",&a[i]);for (i = 0; i < 10; i++){ for (j = i + 1; j < 10;j...
求C语言大神帮给一个只用C语言实现以下程序的代码的程序?
include<stdio.h> include<string.h> define MAX 100 int main() { char s[MAX],a[MAX],b[MAX],temp[MAX];int i=0,j,f,t;gets(s);gets(a);gets(b);while(s[i]!='\\0' && i<strlen(s)) { j=0;while(s[i]!=' ' && i<strlen(s)) temp[j++]=s[i++];temp[j]='...
请描述一下一个简单的C语言源程序代码都包括哪些?
您好,很高兴回答您的问题。在C语言中,无论是什么样程度的代码程序,都包含有以下几个方面:宏定义(或者包含的头文件,视情况而定)函数返回值类型 主函数(类型 变量){变量定义或者初始化;输入语句;计算语句;输出语句;} 函数返回值类型 函数名(类型 变量,类型 变量,。。。)(自定义...
c语言编写 编写一个简单的计算器,实现两个整型数的四则运算。
"<<endl;cin>>b;if(ch=='+')cout<<a+b<<endl;else if(ch=='-')cout<<a-b<<endl;else if(ch=='*')cout<<a*b<<endl;else if(ch=='\/')cout<<a\/b<<endl;cout<<"结束输入N,继续输入任意键!"<<endl;pm=getchar();} return 1;} 要c++的行吗?还要换成c吗?
实现一个简单的计算程序,计算两个20位大整数的和(必须用简单C语言实 ...
这个是两个大数相加,double类型会丢失精度。我的程序可以任意位数的数相加,只要把数组改大点就行了。如果有什么不懂得可以加百度Hi好友问我,很乐意为你解答。include<stdio.h> include<string.h> void main(){ char a[25],b[25];int key1[25],key2[25],answer[25];int len1,len2,t;sc...
用c语言编写一个程序实现以下功能
include "stdio.h"int main(int argc,char *argv[]){int a,b;double x,y;char ch1,ch2;printf("Please enter the data...\\n");scanf("%d%d%lf%lf %c%c",&a,&b,&x,&y,&ch1,&ch2);printf("\\na=%d,b=%d\\nx=%f,y=%f\\nch1=%c,ch2=%c\\n",a,b,x,y,ch1,ch2);return ...
教你如何使用C语言编写简单小游戏
这样学习程序设计,就不会是一件艰苦 ,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣. 1, 总是从Hello,world开始 学习编程的第一个程序,一般就是打印一个亲切的词语——"Hell o,world!".让我们来看看这个最简单的C程序:#incolude \/*把输入输出函数的头文件包含进来*\/int main(){printf("...
如何用c语言实现一个字符串包含另一个字符串的所有字符
在C语言中,可以通过遍历两个字符串的字符,逐个比较的方式来判断一个字符串是否包含另一个字符串的所有字符。以下是一个简单的例子,演示如何实现这个功能:cCopy code#include <stdio.h>#include <stdbool.h>#include <string.h>\/\/ 函数声明bool containsAllChars(const char* str1, const char* ...
简单C语言程序
printf("%c",ch2);printf("\\n");} return 0;} 5. 编程输出所有三位数中的素数。include int main(void){ int x,i;for(x=100;x<=999;x++){ for(i=2;i<x\/2;i++)if(x%i==0)break;if(i==x\/2)printf("%d ",x);} return 0;} 6. 定义一个函数even(),判断一个整数是否...
用C语言编一个简单的程序来判断N×N的矩阵是否为一个幻方。
include"stdio.h"#include"math.h" int a[256][256];int sum;int check();void ins(int n); void main(){ int i,j,n,k,t,p,x; scanf("%d",&n); sum=(n*n+1)*n\/2; if(n%2==1) \/\/奇数幻方 ins(n); if(n%4==2) { \/\/单偶数幻方 k=n\/2; ins...
宾雍气血: 我们才做了这个作业... #include <malloc.h> #include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct scorenode) #define DEBUG #include <string.h> struct scorenode { int number;/*学号*/ char name[8];/*姓名*/ float cj1;/*成绩1*/ ...
孝昌县15944713787: 怎么用c语言编写一个学生成绩管理系统啊?急…… - ?
宾雍气血: C语言课程设计报告-------学生成绩简单管理程序 一、系统菜单的主要功能 (1)输入若干条记录 (2)显示所有记录 (3)按学号排序 (4)插入一条记录 (5)按姓名查找,删除一条记录 (6)查找并显示一条记录 (7)输出统计信息 (新增)...
孝昌县15944713787: 求一个学生成绩管理系统的C语言代码!!急!! - ?
宾雍气血: #includestruct student { char num[10];char name[20];char sex[5];float grade[7];float v;float sum;}stu[50]; int k=0;void input(); void output(); void search(); void average(); void sort(); void save(); void main() { int a;do{printf("\n\n **************...
孝昌县15944713787: 用c语言编写一个程序实现学员成绩管理,每个学生包括3门课的成绩? ?
宾雍气血: #include #define n 20 int static index=0; struct student { int num; char name[n]; float ... gets(str[j].name); //getchar(); printf("三门成绩: "); for(i=0;ichengji;qchengji 3;...
孝昌县15944713787: 如何用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 { ...
孝昌县15944713787: C语言建立一个“学生管理成绩系统” - ?
宾雍气血: #include<stdio.h>#include<malloc.h>#include<string.h>#include<conio.h>#include<windows.h> struct student//初始化结构体 包括学生学号和成绩 { char num[20]; float chengji; struct student*next; }; float p; struct student* luru()//建立链表 录入学生...
孝昌县15944713787: c语言编程实例 1、 实现简单的学生成绩信息管理软件. 学生信息包括:学号、姓名、4门课程的成绩(计算机 - ?
宾雍气血: #include int sum=0; class student { char name[10]; int num; int english; int math; int computer; public: void input(){ cout>name>>num>>english>>math>>computer; } void compete(){ sum=english+math+computer; } }; void output(){ int average; average...
孝昌县15944713787: 求用C语言中最简单的代码编写学生成绩管理系统 - ?
宾雍气血: #include "View.h" //导入视图类 #include//导入标准IO库 int main(void) { View NewView; //显示类 NewView.SetSoftVersion("1.01"); //设置版本 int nState = 0; while(1) { switch(NewView.GetnActionState()) { case 0: return 0; } 这是我在很...
孝昌县15944713787: C语言设计简单的成绩管理系统 - ?
宾雍气血: vc++ 6.0平台编译#include<stdio.h>#include<string.h>#define N 100 struct student { char name[N]; int math; int en; int ch; int av; }stu[N]; void main() { int i,j,k; char a; char n[N]; struct student *p; struct student temp; p=stu; for(i=0;i<101;i++,p++) { ...