C語言實現(xiàn)學(xué)生成績管理系統(tǒng)項目
本文實例為大家分享了C語言實現(xiàn)學(xué)生成績管理系統(tǒng)項目,供大家參考,具體內(nèi)容如下
1、數(shù)據(jù)結(jié)構(gòu):學(xué)生信息:學(xué)號、姓名、年齡、性別、3課成績
2、功能:
(1) 增加學(xué)生記錄
(2) 刪除學(xué)生記錄
(3) 查找學(xué)生信息(學(xué)號、姓名)
(4) 修改學(xué)生信息
(5) 按照成績排序、求平均值、最大值、最小值
3、用戶界面
主菜單
子菜單
4、 批量生成測試數(shù)據(jù)
//
// ?main.c
// ?Student System
//
// ?Created by ma c on 15/7/22.
// ?Copyright (c) 2015年. All rights reserved.
// ?要求:編寫一個學(xué)生成績管理系統(tǒng)。
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 50
struct Student{
? ? char name[20];
? ? int sno;
? ? int age;
? ? char gender;
? ? float EnglishScore;
? ? float mathScore;
? ? float chineseScore;
}stu[N]={{"zhao",1000,20,'M',98,99,97},
? ? ? ? ?{"zhao",1001,21,'F',97,96,95},
? ? ? ? ?{"qian",1002,23,'M',95,96,92},
? ? ? ? ?{"hong",1003,22,'F',91,93,97},
? ? ? ? ?{"zhou",1004,25,'M',90,90,90},
? ? ? ? ?{"feng",1005,21,'F',96,93,96},
? ? ? ? ?{"wang",1006,23,'M',97,91,90},
? ? ? ? ?{"chen",1007,21,'F',94,92,91},
? ? ? ? ?{"geng",1008,20,'F',90,99,91},
? ? ? ? ?{"tang",1009,24,'M',99,99,99}};
//添加數(shù)據(jù)
void add(struct Student stu[],int pos,int nums);
//刪除數(shù)據(jù)
void Delete_name(struct Student *stu,char Name[]);//(按姓名)
void Delete_sno(struct Student *stu,int Sno);//(按學(xué)號)
//修改數(shù)據(jù)
void update(struct Student stu[],int Sno,int len);
//查詢子菜單
void menu(struct Student stu[],int m);
void search(struct Student stu[],int n,char Name[]);//按姓名查詢
void search1(struct Student stu[],int n,int Num);//按學(xué)號查詢
void sort(struct Student stu[],int n); //按總分高低排序
void print(struct Student stu[],int n);
void My_print_sum(struct Student stu[],int n);
void max_min(struct Student stu[],int n);
//主菜單
void PrintScreen()
{
? ? printf("------------------\n");
? ? printf("** 1.增加學(xué)生記錄 **\n");
? ? printf("** 2.刪除學(xué)生記錄 **\n");
? ? printf("** 3.查找學(xué)生記錄 **\n");
? ? printf("** 4.修改學(xué)生記錄 **\n");
? ? printf("** 0.退出管理系統(tǒng) **\n");
? ? printf("------------------\n");
}
//刪除子菜單
void deleteScreen()
{
? ? printf("------------------\n");
? ? printf("** 0.按姓名刪除數(shù)據(jù)**\n");
? ? printf("** 1.按學(xué)號刪除數(shù)據(jù)**\n");
? ? printf("** 2.返回主菜單 ? **\n");
? ? printf("------------------\n");
? ? printf("please select 0-1:");
}
//查找子菜單
void seekScreen()
{
? ? printf("-------------------------\n");
? ? printf("****** 1.按姓名查找信息 ? ?*\n");
? ? printf("****** 2.按學(xué)號查找信息 ? ?*\n");
? ? printf("****** 3.查看所有學(xué)生成績 ?*\n");
? ? printf("****** 4.成績名次排序(總分)*\n");
? ? printf("****** 5.查看成績最優(yōu)最差 ?*\n");
? ? printf("****** 6.返回主菜單 ? ? ? *\n");
? ? printf("-------------------------\n");
? ? printf("please you select 1-6:");
}
//定義全局靜態(tài)變量,統(tǒng)計目前結(jié)構(gòu)體數(shù)組中的人數(shù)
static int count = 10;
//主函數(shù)
int main(int argc, const char * argv[])
{
?int nums,temp;
?int snos;
?char names[20];
?while(1)
?{
? ? PrintScreen();
? ? printf("please press enter_key continue!\n");
? ? getchar();
? ? printf("please select 0-4:");
? ? char c = getchar();
? ? switch(c)
? ? {
? ? ? ? case '1':
? ? ? ? ? ? ? printf("please student'numbers you want to add:");
? ? ? ? ? ? ? scanf("%d",&nums);
? ? ? ? ? ? ? add(stu,count,nums); ? ? ?//添加數(shù)據(jù)
? ? ? ? ? ? ? getchar();
? ? ? ? ? ? ? break;
? ? ? ? case '2':
? ? ? ? ? ? ? deleteScreen();
? ? ? ? ? ? ? scanf("%d",&temp);
? ? ? ? ? ? ? switch(temp)
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? case 0:
? ? ? ? ? ? ? ? ? ? ? printf("please input delete name:");
? ? ? ? ? ? ? ? ? ? ? scanf("%s",names);;
? ? ? ? ? ? ? ? ? ? ? Delete_name(stu,names); ?//刪除數(shù)據(jù)(按姓名刪除)
? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? case 1:
? ? ? ? ? ? ? ? ? ? ? printf("please input delete sno:");
? ? ? ? ? ? ? ? ? ? ? scanf("%d",&snos);
? ? ? ? ? ? ? ? ? ? ? Delete_sno(stu,snos); //刪除數(shù)據(jù)(按學(xué)號刪除)
? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? case 2:
? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? }
? ? ? ? ? ? ? getchar();
? ? ? ? ? ? ? break;
? ? ? ? case '3':
? ? ? ? ? ? ? menu(stu,count);//查找數(shù)據(jù)
? ? ? ? ? ? ? getchar();
? ? ? ? ? ? ? break;
? ? ? ? case '4':
? ? ? ? ? ? ? printf("please input update sno:");
? ? ? ? ? ? ? scanf("%d",&snos);
? ? ? ? ? ? ? update(stu,snos,count); ? ? //修改數(shù)據(jù)
? ? ? ? ? ? ? break;
? ? ? ? case '0':
? ? ? ? ? ? ? exit(0); ? ? ? ? ? ? ? ? ? ?//退出系統(tǒng)
? ? ? ? default:
? ? ? ? ? ? ? printf("data is illeagel!\n");
? ? ? ? ? ? ? getchar();
? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ?//輸入非法
? ? }
?}
?return 0;
}
//添加數(shù)據(jù)
void add(struct Student stu[],int pos,int nums)//開始位置、添加人數(shù)
{
? ? for(int i=pos;i<pos+nums;i++)
? ? {
? ? ? ? printf("please input name:");
? ? ? ? scanf("%s",stu[i].name);
? ? ? ? int flag = 1,sno;
? ? ? ? while(flag)
? ? ? ? {
? ? ? ? ? printf("please input sno:");
? ? ? ? ? scanf("%d",&sno);
? ? ? ? ? ? for(int j=0;j<pos;j++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(stu[j].sno==sno)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? printf("sno is exist!\n");
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? flag = 0;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? stu[i].sno = sno;
? ? ? ? }
? ? ? ? printf("please input age:");
? ? ? ? scanf("%d",&stu[i].age);
? ? ? ? printf("please input gender:(f/m or F/M)");
? ? ? ? getchar();
? ? ? ? scanf("%c",&stu[i].gender);
? ? ? ? printf("please input EnglishScore:");
? ? ? ? scanf("%f",&stu[i].EnglishScore);
? ? ? ? printf("please input mathScore:");
? ? ? ? scanf("%f",&stu[i].mathScore);
? ? ? ? printf("please input ChineseScore:");
? ? ? ? scanf("%f",&stu[i].chineseScore);
? ? ? ? printf("學(xué)生信息添加成功!\n");
? ? }
? ? count = count + nums;
}
//按學(xué)號刪除
void Delete_sno(struct Student *stu,int Sno)
{
? ? if(count==0)
? ? {
? ? ? ? printf("成員已為空!\n");
? ? ? ? return;
? ? }
? ? int flag=0;
? ? for(int i=0;i<count;i++)
? ? {
? ? ? ? if((stu+i)->sno==Sno)
? ? ? ? {
? ? ? ? ? ? for(int j=i;j<count;j++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? *(stu+j)=*(stu+j+1);
? ? ? ? ? ? }
? ? ? ? ? ? printf("\n");
? ? ? ? ? ? printf("學(xué)號為%d的學(xué)生已被刪除\n",Sno);
? ? ? ? ? ? printf("\n");
? ? ? ? ? ? flag=1;
? ? ? ? ? ? count = count-1;
? ? ? ? ? ? break;
? ? ? ? }
? ? }
? ? if(flag==0)
? ? ? ? printf("學(xué)號%d不存在.\n",Sno);
}
//按姓名刪除
void Delete_name(struct Student *stu,char Name[])
{
? ? if(count==0)
? ? {
? ? ? ? printf("成員已為空!\n");
? ? ? ? return;
? ? }
? ? int flag=0;
? ? int n=count;
? ? for(int i=0;i<n;i++)
? ? {
? ? ? ? if(strcmp((stu+i-flag)->name,Name)==0)
? ? ? ? {
? ? ? ? ? ? for(int j=i-flag;j<count;j++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? *(stu+j)=*(stu+j+1);
? ? ? ? ? ? }
? ? ? ? ? ? printf("\n");
? ? ? ? ? ? printf("學(xué)生:%s 已被刪除.\n",Name);
? ? ? ? ? ? printf("\n");
? ? ? ? ? ? flag=flag+1;
? ? ? ? ? ? count =count -1;
? ? ? ? }
? ? }
? ? if(flag==0)
? ? ? ? printf("學(xué)生:%s 不存在.\n",Name);
}
//修改數(shù)據(jù)
void update(struct Student stu[],int sno,int len)
{
? ? char cs,cs1,cs2,cs3;
? ? char p[20];
? ? int grade,i;
? ? for(i=0; i<len; i++)
? ? {
? ? ? ? if(sno==stu[i].sno)
? ? ? ? {
? ? ? ? ? ? printf("please ask update name?(y/n):");
? ? ? ? ? ? getchar();
? ? ? ? ? ? cs = getchar();
? ? ? ? ? ? if(cs == 'y')
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("please input a new name:");
? ? ? ? ? ? ? ? scanf("%s",p);
? ? ? ? ? ? ? ? getchar();
? ? ? ? ? ? ? ? strcpy(stu[i].name,p);
? ? ? ? ? ? ? ? printf("update is succeed!\n");
? ? ? ? ? ? }
? ? ? ? ? ? printf("please ask update EnglishScore?(y/n):");
? ? ? ? ? ? cs1 = getchar();
? ? ? ? ? ? if(cs1 == 'y')
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("please input a new grade:");
? ? ? ? ? ? ? ? scanf("%d",&grade);
? ? ? ? ? ? ? ? stu[i].EnglishScore = grade;
? ? ? ? ? ? ? ? printf("update is succeed!\n");
? ? ? ? ? ? }
? ? ? ? ? ? printf("please ask update mathScore?(y/n):");
? ? ? ? ? ? getchar();
? ? ? ? ? ? cs2 = getchar();
? ? ? ? ? ? if(cs2 == 'y')
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("please input a new grade:");
? ? ? ? ? ? ? ? scanf("%d",&grade);
? ? ? ? ? ? ? ? stu[i].mathScore = grade;
? ? ? ? ? ? ? ? printf("update is succeed!\n");
? ? ? ? ? ? }
? ? ? ? ? ? printf("please ask update chineseScore?(y/n):");
? ? ? ? ? ? getchar();
? ? ? ? ? ? cs3 = getchar();
? ? ? ? ? ? if(cs3 == 'y')
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("please input a new grade:");
? ? ? ? ? ? ? ? scanf("%d",&grade);
? ? ? ? ? ? ? ? stu[i].chineseScore = grade;
? ? ? ? ? ? ? ? printf("update is succeed!\n");
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? getchar();
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? else if(i==len-1)
? ? ? ? {
? ? ? ? ? ? printf("error,don't have the sno!");
? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? continue;
? ? ? ? }
? ? }
}
//查詢數(shù)據(jù)
void menu(struct Student stu[],int m)
{
? ? int logel = 1;
? ? while(logel)
? ? {
? ? ? ? seekScreen();
? ? ? ? int n;
? ? ? ? scanf("%d",&n);
? ? ? ? char name[20];
? ? ? ? int num;
? ? ? ? switch(n)
? ? ? ? {
? ? ? ? ? ? case 1 :
? ? ? ? ? ? ? ? printf("請輸入同學(xué)的姓名: ");
? ? ? ? ? ? ? ? scanf("%s",name);
? ? ? ? ? ? ? ? search(stu,count,name);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 2 :
? ? ? ? ? ? ? ? printf("\n請輸入同學(xué)的學(xué)號: ");
? ? ? ? ? ? ? ? scanf("%d",&num);
? ? ? ? ? ? ? ? search1(stu,count,num);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 3:
? ? ? ? ? ? ? ? print(stu,count);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 4:
? ? ? ? ? ? ? ? sort(stu,count);
? ? ? ? ? ? ? ? print(stu,count);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 5:
? ? ? ? ? ? ? ? max_min(stu,count);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 6:
? ? ? ? ? ? ? ? logel = 0;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? default:
? ? ? ? ? ? ? ? logel = 0;
? ? ? ? ? ? ? ? printf("輸入數(shù)字有誤!\n");
? ? ? ? ? ? ? ? break;
? ? ? ? }
? ? }
}
void search(struct Student stu[],int n,char Name[])
{
? ? char* p= Name;
? ? int flag = 0;
? ? for(int i=0;i<n;i++)
? ? {
? ? ? ? if(strcmp(stu[i].name,p)==0)
? ? ? ? {
? ? ? ? ? ? flag = 1;
? ? ? ? ? ? My_print_sum(stu,i);
? ? ? ? }
? ? }
? ? if(flag==0)
? ? {
? ? ? ? printf("the name is not exist!\n");
? ? }
}
void search1(struct Student stu[],int n,int Num)
{
? ? int flag = 0;
? ? for(int i=0;i<n;i++)
? ? {
? ? ? ? if(Num==stu[i].sno)
? ? ? ? {
? ? ? ? ? ? flag = 1;
? ? ? ? ? ? My_print_sum(stu,i);
? ? ? ? }
? ? }
? ? if(flag==0)
? ? {
? ? ? ? printf("the sno is not exist!\n");
? ? }
}
void sort(struct Student stu[],int n)
{
? ? float sum[N];
? ? for(int i=0;i<n;i++)
? ? {
? ? ? ? sum[i]=stu[i].EnglishScore+stu[i].mathScore+stu[i].chineseScore;
? ? }
? ? for(int i=0;i<n-1;i++)
? ? {
? ? ? ? for(int j=0;j<n-1-i;j++)
? ? ? ? {
? ? ? ? ? ? if(sum[j]<sum[j+1])
? ? ? ? ? ? {
? ? ? ? ? ? ? ? float temp1 = sum[j];
? ? ? ? ? ? ? ? sum[j] = sum[j+1];
? ? ? ? ? ? ? ? sum[j+1] = temp1;
? ? ? ? ? ? ? ? struct Student temp;
? ? ? ? ? ? ? ? temp=stu[j];
? ? ? ? ? ? ? ? stu[j]=stu[j+1];
? ? ? ? ? ? ? ? stu[j+1]=temp;
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
void max_min(struct Student stu[],int n)
{
? ? sort(stu,n);
? ? printf("成績最優(yōu)的同學(xué):");
? ? My_print_sum(stu,0);
? ? printf("成績最差的同學(xué):");
? ? My_print_sum(stu,n-1);
}
void print(struct Student stu[],int n)
{
? ? for(int i=0;i<n;i++)
? ? {
? ? ? ? My_print_sum(stu,i);
? ? }
}
void My_print_sum(struct Student stu[],int n)
{
? ? printf("\n姓名:%s,學(xué)號:%d,年齡:%d,性別:%c,英語:%.2f,數(shù)學(xué):%.2f,語文: %.2f,總分:%.2f\n",
? ? ? ? ? ?stu[n].name,stu[n].sno,stu[n].age,stu[n].gender,
? ? ? ? ? ?stu[n].EnglishScore,stu[n].mathScore,stu[n].chineseScore,(stu[n].EnglishScore+stu[n].mathScore+stu[n].chineseScore));
}以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語言編寫學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)C語言代碼實現(xiàn)
- C語言利用結(jié)構(gòu)體數(shù)組實現(xiàn)學(xué)生成績管理系統(tǒng)
- C語言學(xué)生成績管理系統(tǒng)源代碼
- C語言實現(xiàn)學(xué)生成績管理系統(tǒng)實戰(zhàn)教學(xué)
- C語言實現(xiàn)簡單學(xué)生成績管理系統(tǒng)
- C語言結(jié)構(gòu)體版學(xué)生成績管理系統(tǒng)
- C語言實現(xiàn)學(xué)生成績管理系統(tǒng)
- C語言學(xué)生成績管理系統(tǒng)課程設(shè)計
- C語言學(xué)生成績管理系統(tǒng)設(shè)計
相關(guān)文章
一文詳解如何在VS?Code上搭建C/C++開發(fā)環(huán)境
VSCode是由微軟開發(fā)的一款免費、開源、跨平臺的文本編輯器,它具有許多強大的功能,這篇文章主要給大家介紹了關(guān)于如何在VS?Code上搭建C/C++開發(fā)環(huán)境的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2024-03-03
C++ Boost PointerContainer智能指針詳解
智能指針是一種像指針的C++對象,但它能夠在對象不使用的時候自己銷毀掉。雖然STL提供了auto_ptr,但是由于不能同容器一起使用(不支持拷貝和賦值操作),因此很少有人使用。它是Boost各組件中,應(yīng)用最為廣泛的一個2022-11-11
使用C++進行Cocos2d-x游戲開發(fā)入門過程中的要點解析
這篇文章主要介紹了使用C++進行Cocos2d-x游戲開發(fā)入門過程中的要點解析,主要針對畫面變化以及觸摸響應(yīng)方面,需要的朋友可以參考下2015-12-12
opencv3/C++關(guān)于移動對象的輪廓的跟蹤詳解
今天小編就為大家分享一篇opencv3/C++關(guān)于移動對象的輪廓的跟蹤詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
VS2019調(diào)試C語言程序(監(jiān)視操作)的詳細步驟
在很多時候我們在寫程序的過程中會發(fā)現(xiàn)一些非編程錯誤的問題,這樣的問題很難直接分辨出來,但是我們可以用調(diào)試了一步一步的模擬程序運行的過程,來找出程序的錯誤,下面這篇文章主要給大家介紹了關(guān)于VS2019調(diào)試C語言程序(監(jiān)視操作)的詳細步驟,需要的朋友可以參考下2022-11-11

