参加一个c语言比赛,写个项目,学生成绩管理系统,用单项链表写的,有什么功能,很出彩

作者&投稿:苗雪 (若有异议请与网页底部的电邮联系)
我写了一个代码,求c语言大神帮忙,是最基本的学生成绩管理系统,用单链表,但是我每输入一个学生的成绩~

需要什么程序语言开发
有,程序 论文 代码 开题 和PPT 保证可以运行

Typedef struct就可以了啊。

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#define _COURSES 3//定义科目数
#define _LEN sizeof(student)//定义结构体大小

//枚举返回值情况
enum status {
OVERFLOW = -1, //内存(溢出)问题
DONE = 0, //成功
NOFOUND = 1, //不存在
OPENFAIL = 2, //打开(文件)失败
BACK = 3 //返回
};
typedef struct StudentInfo {
//数据域
unsigned int num;//学号
char name[11];//姓名
float scores[_COURSES];//各科成绩
//指针域
struct StudentInfo *next;//存放下一节点的地址
}student;
//end

student *head = NULL;//声明链表头结点
student *curr = NULL;//声明指向当前节点的指针
int total = 0;//声明当前节点个数



int init();//初始化链表
int add_stu();//添加新节点
int show_all();//显示所有学生信息
int find_stu();//查找指定信息节点
int modify_stu();//修改指定信息节点
int remove_stu();//删除指定信息节点
int sort_list();//对链表排序
int save_to_file();//将所有信息保存至文件
int read_from_file();//从文件中读取信息
void about();//关于
int quit();//释放所有节点空间

int entering(student *input);//录入学生信息
void show_stu(student *show, int serial);//显示指定学生信息
void start();//程序开始界面
void change(student *former, student *latter, student *temp);

void main() {
int choice = 0;
init();
while(1) {
system("cls");
start();
printf("请选择:");
scanf("%d",&choice);
fflush(stdin);//清空缓冲区
switch (choice) {
case 1: add_stu(); break;
case 2: show_all(); break;
case 3: find_stu(); break;
case 4: modify_stu(); break;
case 5: remove_stu(); break;
case 6: sort_list(); break;
case 7: save_to_file(); break;
case 8: read_from_file(); break;
case 9: about(); break;
case 0: quit(); exit(0); break;
default: break;
}
system("pause");
}
}

int init() {
head = (student *)malloc(_LEN);//为头结点申请空间
if (!head) {//如果申请空间失败,返回
return OVERFLOW;
}
head->next = NULL;//指向下一节点(空)
curr = head->next;//当前节点指针指向第一个结点
total = 0;//当前节点个数初始化为0(头结点不计算在内)

return DONE;
}

int add_stu() {
student *add = (student *)malloc(_LEN);
curr = head->next;//当前节点指针指向第一个节点

printf("====当前已存入 %d 个同学
",total);
printf("请输入第 %d 个学生的信息
",total + 1);
if (BACK == entering(add)) {
free(add);
return BACK;
}

head->next = add;//头结点指针域指向新建的节点
add->next = curr;//新建节点指针域指向第一个节点
curr = add;  //当前节点指向新建的节点
total += 1;  //更新学生总人数
return DONE;
}
int show_all() {
if(0 == total) {
printf("====没有可供显示的学生信息!
");
return NOFOUND;
}

curr = head->next;//当前节点指针指向第一个节点

printf("%4s%12s%12s","序号","学号","姓名");
for(int m = 0; m <_COURSES; m++) {
printf("%7s","科目");
}
printf("
");
printf("-------------------------------------------------------------
");

for(int i = 1; i<=total; i++) {
show_stu(curr,i);
curr = curr->next;//当前节点指针后移
}
printf("-------------------------------------------------------------
");
return DONE;
}
int find_stu() {
char stu_name[11];
int flag=1;
printf("请输入要查找的学生姓名:");
scanf("%s",stu_name);
curr = head->next;//指向第一个节点
while (curr != NULL) {
if (strcmp(stu_name,curr->name) == 0) {
printf("%4s%12s%12s","序号","学号","姓名");
for (int m=0; m< _COURSES; m++) {
printf("%7s","科目");
}
printf("
");
printf("-------------------------------------------------------------
");
show_stu(curr,flag);
return DONE;
}
curr = curr->next;
++flag;
}
printf("====没有找到 %s !请仔细核对姓名再查找
",stu_name);
return NOFOUND;
}

int modify_stu() {
char stu_name[11];
int flag = 1;
curr = head->next;//指向第一个节点
printf("请输入要修改的学生的姓名:");
scanf("%s",stu_name);
while(curr != NULL) {
if(strcmp(stu_name,curr->name) == 0) {
printf("%4s%12s%12s","序号","学号","姓名");
for(int m = 0; m < _COURSES; m++) {
printf("%7s","科目");
}
printf("
");
printf("-------------------------------------------------------------
");
show_stu(curr,flag);

entering(curr);
printf("====成功修改了 %s 的所有信息!
",stu_name);

return DONE;
}
curr = curr->next;
++flag;
}
printf("====没有找到 %s !请仔细核对姓名
",stu_name);
return NOFOUND;
}


int remove_stu() {
student *pre=head;
char stu_name[11];
curr = head->next;//指向第一个节点
printf("请输入要删除的学生的姓名:");
scanf("%s",stu_name);

while (curr != NULL) {
if (strcmp(stu_name,curr->name) == 0) {
pre->next = curr->next; //
free(curr); //
--total; //
printf("====已成功删除\"%s\"
",stu_name);

return DONE;
}
pre = pre->next;
curr = curr->next;
}
printf("====没有找到 %s !请仔细核对姓名
",stu_name);
return NOFOUND;
}


int sort_list() {
student *temp = (student *)malloc(_LEN);
student *curr_i = head->next;
student *curr_j = NULL;
char choice='0';

printf(" 1----按学号排序 .2----按姓名排序 .           
");
printf(" 3----按科目排序 .0----退 出 排 序.           
"); 
printf("请选择:");
scanf("%c",&choice);
fflush(stdin);
switch (choice) {
case '1': {
while(curr_i->next != NULL) {
curr_j = curr_i->next;
while (curr_j != NULL) {
if (curr_i->num > curr_j->num) {
change(curr_i,curr_j,temp);
}
curr_j = curr_j->next;
}
curr_i = curr_i->next;
}
printf("====排序成功!
");
break;
}
case '2': {
while(curr_i->next != NULL) {
curr_j = curr_i->next;
while (curr_j != NULL) {
if (strcmp(curr_i->name , curr_j->name) > 0) {
change(curr_i,curr_j,temp);
}
curr_j = curr_j->next;
}
curr_i = curr_i->next;
}
printf("====排序成功!
");
break;
}
case '3': {
while(curr_i->next != NULL) {
curr_j = curr_i->next;
while (curr_j != NULL) {
if (curr_i->scores[0] < curr_j->scores[0]) {
change(curr_i,curr_j,temp);
}
curr_j = curr_j->next;
}
curr_i = curr_i->next;
}
printf("====排序成功!
");
break;
}
case '0': {
free(temp);
return BACK;
}
default: {
printf("====输入有误!
");
break;
}
}
free(temp);
return DONE;
}

int save_to_file() {
curr = head->next;
if (total == 0) {
printf("====目前还没有任何信息,不用保存!
");
return BACK;
}

FILE *fp;
if((fp=fopen("record.dat","wb"))==NULL) {
printf("====文件打开失败!
");
return OPENFAIL;
}
while (curr != NULL) {
//将数据成块写入文件
fwrite((char *)curr, _LEN, 1, fp);
curr = curr->next;
}
fclose(fp);
printf("====信息已成功保存至文件\"record.dat\"文件中
");

return DONE;
}

int read_from_file() {
char judge='y';
FILE *fp;

if((fp = fopen("record.dat","r")) == NULL) {
printf("文件不存在或者打开失败!
");
return OPENFAIL;
}
printf("====读取文件会覆盖当前信息!是否确定载入文件?(y/n):");
scanf("%c",&judge);
if (judge=='n' || judge=='N') {
return BACK;
}

quit();//释放以前所有信息的空间
init();//重新初始化链表
curr = head;//当前节点指针指向头结点

student *add=(student *)malloc(_LEN);//申请空间存放读取的信息

while (fread((char *)add, _LEN, 1, fp)) { //由于存储的信息是最新的信息在前,所以读取的时候将其添加在链表尾
add->next=curr->next;
curr->next=add;
curr=add;
add=(student *)malloc(_LEN);
++total;
}
fclose(fp);
printf("====文件载入成功!当前已有%d个学生。
",total);

return DONE;
}

void about() {
printf("#############################################################
");
printf("
 欢迎各位用户反馈、提出宝贵的意见和建议  
");                         
printf(" 联系方式  
");            
printf(" 手  机:13815601299  
");
printf(" E-mail:876929541@QQ.com  
");
printf("
 C语言学生成绩管理系统1.0版

");
printf("#############################################################
");
}

int quit() {
curr =head->next;
student *temp=curr;
while(curr != NULL) {
temp=curr->next;
free(curr);
curr=temp;
}
curr=NULL;
temp=NULL;
free(head);//释放头节点
return DONE;
}

int entering(student *input) {
printf("
请输入学生的学号(输入0退出添加):");
scanf("%d",&input->num);
if (0 == input->num) {
return BACK;
}

printf("请输入学生的姓名(五个汉字以内):");
scanf("%s",input->name);

printf("请输入%d门科目的成绩(用空格隔开):", _COURSES);
for (int i=0; i<_COURSES; i++) {
scanf("%f",&input->scores[i]);
}

return DONE;
}

void show_stu(student *show, int serial) {
printf("%4d%12d%12s",serial,show->num,show->name);
for (int i = 0; i < _COURSES; i++) {
printf("%7.1f",show->scores[i]);
}
printf("
");
}

void start() {
printf("
");
printf("欢迎使用学生成绩管理系统
");
printf("*************************************************************
");
printf("|1----添 加 学 生.2----显 示 信 息.          |
");                         
printf("|3----查 找 学 生.4----修 改 信 息.          |
");            
printf("|5----删 除 学 生.6----学 生 排 序.          |
");
printf("|7----信 息 存 档.8----读 取 存 档.          |
");
printf("|9----关       于.0----退       出.          |
");
    printf("*************************************************************
");
}

void change(student *former, student *latter,student *temp) {
*temp = *former;
strcpy(former->name , latter->name);
strcpy(latter->name , temp->name);
former->num = latter->num;
latter->num = temp->num;
for (int i=0; i<_COURSES; i++) {
former->scores[i] = latter->scores[i];
latter->scores[i] = temp->scores[i];
}
}



C语言 编写一个程序,用户输入一个整数n后打印出由* '号组成的n行n列的...
int n,i,j;printf("请输入数字:");scanf("d%",&n);for(i=0;i<n;i++){ for(j=0;j<n;j++){ printf("* ");} printf("\\n");} 插进去就ok了

c语言问题 答题的时候,如果输出结果里有\\n,需要加一个回车符号吗?比如...
这要看题目的要求,一般的简答题,重点是考对程序的理解,主要是写结果就行,但如果题目有要求写出\\n的话,就要加上去

C语言程序设计课程设计扫地雷游戏,怎么做?
C语言程序设计课程设计扫地雷游戏,怎么做?  我来答 2个回答 #热议# 《请回答2021》瓜分百万奖金 水晶扇 2012-07-23 · TA获得超过1525个赞 知道大有可为答主 回答量:837 采纳率:100% 帮助的人:774万 我也去答题访问个人页 关注 展开全部 #include <stdlib.h>#include #include <conio.h...

C语言的编程,51单片机报警器,加一引脚控制,按下去响,弹起来停止。
if,或者while就可以搞定了。

C语言,每输出5个数换行
加一个计数的变量,每次找到目标时计数加一,被5整除时换行。源代码如下:include <stdio.h> int main() { int a, b, c;int l, i;int count = 0; \/\/ 计数的变量 for (i = 100; i <= 999; i++){ a = i \/ 100;b = i \/ 10 % 10;c = i % 10;l = a + b + c;if...

用c语言写个程序24c08(EEprom)控制两个数码管 实现重1加到99 掉电不...
define uchar unsigned char unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsigned char sec=0; \/\/定义计数值,每过1秒,sec加1 unsigned int count; \/\/定时中断次数 bit write=0; \/\/写24C08的标志;sbit gewei=P2^7; \/\/个位选通定义 sbit ...

c语言中的随机函数如果随机了50次,怎么把随机的这50个数加在一起
只要每次随机累加即可。写成函数如下:int func(void){ int r = 0; int n,i; for(i = 0; i < 50; i ++)\/\/执行50次 { n = rand();\/\/获取一个随机数。 r+=n;\/\/累加。 } return r;\/\/将结果返回。} ...

c语言编程题,编写一个函数,实现n阶方阵的转置(即行列互换)急急急...
include <stdio.h> include <stdlib.h> int main(){ int a[3][3]={1,2,3,4,5,6,7,8,9};int j,i,temp;for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=1;i<2;i++)for(j=0;j<=i;j++){ temp=a[i][j];a[i][j]=a[j][i];a[j...

一道C语言2级题目,要求编写一个函数void fun(char *tt,int pp...
26个字母,pp只需26个元素即可,for (k=0;k<=26;k++)(pp+k)=0;0到26,是总共27个元素,已经超出了主函数中传递过来的数组的范围了。另外,*(pp+k)++; 修改为 (*(pp+k))++;记住:*(p)++ 等价于 *(p++) 等价于 *p;p++;...

C语言,如何给下面代码加一个是否继续计算Y\/N?
我没有对你的程序进行检测,直接在原程序基础上加的代码!!!char a,ch,Opear;while(1==1)\/\/一直循环 { int zongshu=0,zimu=0,shuzi=0,zifu=0;printf("请输入一行字符:\\n");do { a=getchar();printf("");zongshu++;if(a>='a'&&a<='z'||a>='A'&&a<='Z')zimu++;else if...

若羌县13947039791: 参加一个c语言比赛,写个项目,学生成绩管理系统,用单项链表写的,有什么功能,很出彩 -
翠曲广东: #include

若羌县13947039791: 我要参加学校的程序设计大赛,我用C语言编了一个小计算器,但是学校还要求将程序变为.exe形式,怎么办呀? -
翠曲广东: 不知道你是用的什么编译器 vc6.0 还是vs2005 还是vs2010 所以没办法给你具体的做法.但是你需要这样做,在编译设置里面选择release模式(默认的是debug),选择完后按F7编译,就会生成一个你需要的exe.

若羌县13947039791: 写一个C语言小程序
翠曲广东:#include<stdio.h> #include<string.h> #define N 15 struct com { char name[21]; char sex; int munber[N]; int age[N]; float score[8]; }; void main() { int i,j,k,lastScore[N]={0},n,m,p,sh=0,he=0, average=0; char s[21]; struct com c[15]; printf("请依次输...

若羌县13947039791: C语言问题火锅火锅和火锅 -
翠曲广东: 错在思路上,所以代码整体0分...c[10000]存的愉快度都是从第一道菜开吃的,可题中没说必须吃第一道菜.int T,N,c;int result[2] = {0};scanf("%d", for (int i = 0; i <...

若羌县13947039791: 我们要参加程序设计大赛,不知道弄个什么题目,我们只学习了c语言. -
翠曲广东: 哈哈,我给你个题目,很有实际意义,把这个题目做出来你们团队绝对拿第一!!只要c语言基础就可以做,不存在任何系统调用.就是内存管理接口:对所有malloc分配的内存地址继续管理,包括异常处理(涉及到进程的栈知识),所申请的内存地址存储到一个哈希表中,然后再在内部用一个循环链表对为分配的内存地址进行管理(索引),挺难的,你可以参考《C语言接口与实现》里面全是c的基础知识实现的,对学习数据结构非常有价值.

若羌县13947039791: 运用C语言或VB编译一个简单的程序来参加大学生创新科技大赛 -
翠曲广东: 简单的运用程序就不用去参加大学生创新创业大赛了

若羌县13947039791: 一个C语言项目需求都需要写什么啊??如一个学生信息管理系!!是要写在记事本里的和文档里面的内容啊!!!
翠曲广东: 这个也叫项目需求/计划书 一般里面要写上你的编写目的 项目背景 系统功能 项目管理环境 项目估计风险和对策 项目实施计划 根据你的需要自己增加或者减少 实施计划

若羌县13947039791: c语言 选拔参赛学生 1. 目的: 通过编写“选拔参赛学生”程序,培养学生综合利用C++语言进行程序设计的能 -
翠曲广东: #include #include struct student {char xueyuan[20];int num;char name[20];char sex[3];double s1;double s2;double sum; };void main () {student stu[30];int j,n1,n2,Imax,cha;int i=0;char sex1[3]="男";n1=0;n2=0;while (i<...

若羌县13947039791: 一个C语言项目要求都包括什么啊????例如一个学生的管理系统为例 -
翠曲广东: 1.引言 1.1编写目的 编写本文档的目的1.2产品介绍 说明产品是什么,什么用途 介绍产品的开发背景1.3定义 术语与缩写的解释1.4参考资料2.任务概述 2.1目标 项目的目标2.2运行环境2.3产品面向的用户群体 描述本产品面向的用户(客户、...

若羌县13947039791: C语言程序设计:学生参加竞赛,输入学生的成绩,如果成绩小于65分,输出没有获奖;如果成绩大于91分 -
翠曲广东: #include<stdio.h> main() {int score; while(score!=-999) {scanf("%d",&score); if(score>91&&score<=100)printf("一等奖\n"); else if (score>81)printf("二等奖\n"); else if (score>71)printf("三等奖\n"); else if (score>60)printf("优秀奖\n"); else if(score>=0&&score<=60)printf("没有获奖\n"); else printf("\n"); } } 65和60这里是什么情况

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网