安卓课设

Android移动应用开发

课程设计报告

(2019—2020学年 第Ⅰ学期)

商品管理系统

系    别        信息与控制工程系

专    业        计算机科学与技术

班    级          计算机1702

学    号          173230221

姓    名           孟繁武

指导教师            郭丹

完成时间       2019年12月05日

目 录

商品管理系统1

一、需求分析1

系统设计1

1、数据流图 1

2、功能描述 1

3、系统开发及运行环境 2

三、系统测试2

1、登录界面 2

2、注册界面 3

3、主界面 5

4、商品展示界面 6

5、管理商品界面 7

6、留言板界面 8

四、 系统实现9

(核心模块界面,关键代码) 9

1、管理商品9

activity_guanli.xml 9

布局文件listview_item.xml 12

CartBean实体类 13

CartAdapter适配器类 14

MyHelper数据库类 15

2、商品展示19

activity_shangpin.xml 19

布局文件list_item.xml 19

五、个人心得22

 

一、需求分析

购物已成为生活中不可缺少的一部分,大大小小的商店,超市充斥着城市乡镇的每个角落,一套优秀的商品管理系统对于商家的管理者和消费者都会起到很重要的作用,不但便于消费者对商品信息进行查询,也便于商家对所拥有的产品信息进行添加,修改,查询,删除等操作,因此有必要设计一套管理系统对商品进行管理。

系统设计

1、数据流图

2、功能描述

2.1登录功能

需要输入账号、密码才能进入主页面。因时间等因素,本次app设计比较简单,只要账号密码都不为空就能登陆成功进入下一界面。这里用到了activity之间的跳转和数据传递功能将账号传递到主页面并将其显示出来。用Toast语句提示登陆成功或登录失败。

2.2注册功能

输入账号密码以及再次输入密码即可(这里密码与再次输入的密码必须一致),因本app只是个人用途所以这部分功能并没有全部实现。

2.3主界面功能

这里用数据传递获取登录界面传递过来的账号信息,并显示在界面上方便用户查看,界面主要放了三个按钮用于点击跳转到其他功能界面。

2.4商品展示功能

本界面功能用listview展示部分商品,包括图片,商品名字,价格,评价等信息,方便用户查看。

2.5管理商品功能

用安卓自带的SQLite进行商品名称、数量、价格等数据的增加、删除、修改、查询等功能,用listview加以展示出来。方便用户管理商品信息。

2.6留言板功能

主要用于存放用户对app的意见,用文件数据存储方式进行储存。

3、系统开发及运行环境

开发环境:android studio

运行环境:Android智能手机(平时自己用的vivo nexs)

三、系统测试

1、登录界面

 

 

2、注册界面

3、主界面

4、商品展示界面

5、管理商品界面

6、留言板界面

四、系统实现

(核心模块界面,关键代码)

1、管理商品

activity_guanli.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorGrayDark"
    android:orientation="vertical"
    tools:context="com.example.deal1.GuanliActivity">

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="25dp"
        android:text="管理商品"
        android:textSize="45sp" />

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:orientation="horizontal">

<TextView
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="商品:"
            android:textSize="25sp" />

<EditText
            android:id="@+id/et_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:hint="请输入商品名称"
            android:textSize="25sp" />
    </LinearLayout>

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

<TextView
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="数量:"
            android:textSize="25sp" />

<EditText
            android:id="@+id/et_number"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:hint="请输入购买数量"
            android:textSize="25sp" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

<TextView
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="价格:"
            android:textSize="25sp" />

<EditText
            android:id="@+id/et_price"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:hint="请输入商品价格"
            android:textSize="25sp" />
    </LinearLayout>

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="15dp"
        android:orientation="horizontal">

<Button
            android:id="@+id/add"
            android:layout_width="0dp"
            android:layout_height="45dp"
            android:layout_weight="1"
            android:background="#b9b9ff"
            android:text="添加"
            android:textSize="18sp" />

<View
            android:layout_width="5dp"
            android:layout_height="45dp"
            android:background="@android:color/white" />

<Button
            android:id="@+id/query"
            android:layout_width="0dp"
            android:layout_height="45dp"
            android:layout_weight="1"
            android:background="#dcb5ff"
            android:text="查询"
            android:textSize="18sp" />

<View
            android:layout_width="5dp"
            android:layout_height="45dp"
            android:background="@android:color/white" />

<Button
            android:id="@+id/update"
            android:layout_width="0dp"
            android:layout_height="45dp"
            android:layout_weight="1"
            android:background="#acd6ff"
            android:text="修改"
            android:textSize="18sp" />

<View
            android:layout_width="5dp"
            android:layout_height="45dp"
            android:background="@android:color/white" />

<Button
            android:id="@+id/delete"
            android:layout_width="0dp"
            android:layout_height="45dp"
            android:layout_weight="1"
            android:background="#acd6ff"
            android:text="删除"
            android:textSize="18sp" />

</LinearLayout>

<ListView
        android:id="@+id/listView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:background="#00FFFFFF" />

</LinearLayout>

布局文件listview_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="10dp">
    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/wupin"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:orientation="vertical">
        <TextView
            android:id="@+id/tv_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="20sp"/>
        <TextView
            android:id="@+id/tv_price"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="3dp"
            android:textSize="20sp"/>
        <TextView
            android:id="@+id/tv_number"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="3dp"
            android:textSize="20sp"/>
    </LinearLayout>

</LinearLayout>

 

CartBean实体类

package com.example.deal1;

class CartBean {
    private String name;
    private String price;
    private String number;

public String getName() {
        return name;
    }

public void setName(String name) {
        this.name = name;
    }

public String getPrice() {
        return price;
    }

public void setPrice(String price) {
        this.price = price;
    }

public String getNumber() {
        return number;
    }

public void setNumber(String number) {
        this.number = number;
    }
}

CartAdapter适配器类

package com.example.deal1;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

class CartAdapter extends BaseAdapter {
    private List<CartBean> list;
    private LayoutInflater layoutInflater;
    public CartAdapter(Context context, List<CartBean> list){
        this.layoutInflater = LayoutInflater.from(context);
        this.list = list;
    }
    @Override
    public int getCount() {
        Log.e("yanwenhua","list.size()--"+list.size());
        return list.size();
    }

@Override
    public Object getItem(int position) {
        return null;
    }

@Override
    public long getItemId(int position) {
        return 0;
    }

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView==null){
            convertView=layoutInflater.inflate(R.layout.listview_item,null);
            viewHolder=new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        }else {
            viewHolder=(ViewHolder) convertView.getTag();
        }
        CartBean cartBean = list.get(position);
        viewHolder.tv_name.setText("商品名称:"+cartBean.getName());
        viewHolder.tv_price.setText("商品价格:"+cartBean.getPrice());
        viewHolder.tv_number.setText("商品数量:"+cartBean.getNumber());
        Log.e("yanwenhua","cartBean.getName()-"+cartBean.getName()+"  "+cartBean.getPrice()+"  "+cartBean.getNumber());
        return convertView;
    }
    class ViewHolder{
        TextView tv_name;
        TextView tv_price;
        TextView tv_number;
        public ViewHolder(View view){
            tv_name = (TextView) view.findViewById(R.id.tv_name);
            tv_price = (TextView) view.findViewById(R.id.tv_price);
            tv_number = (TextView) view.findViewById(R.id.tv_number);
        }
    }
}

MyHelper数据库类

package com.example.deal1;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

class MyHelper extends SQLiteOpenHelper {
    public MyHelper(Context context) {
        super(context, "shoppingcart.db", null, 1);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE cart(_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20),  price VARCHAR(20), number VARCHAR(20))");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}

GuanliActivity.java

package com.example.deal1;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;
import java.util.List;

public class GuanliActivity extends AppCompatActivity implements View.OnClickListener {

private EditText et_name, et_price, et_number;
    private ListView listView;
    private String name, price, number;
    private MyHelper myHelper;
    private SQLiteDatabase db;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guanli);
        et_name = (EditText) findViewById(R.id.et_name);
        et_price = (EditText) findViewById(R.id.et_price);
        et_number = (EditText) findViewById(R.id.et_number);
        listView = (ListView) findViewById(R.id.listView);
        Button add = (Button) findViewById(R.id.add);
        Button query = (Button) findViewById(R.id.query);
        Button update = (Button) findViewById(R.id.update);
        Button delete = (Button) findViewById(R.id.delete);
        add.setOnClickListener(this);
        query.setOnClickListener(this);
        update.setOnClickListener(this);
        delete.setOnClickListener(this);
        myHelper = new MyHelper(this);
    }

public void onClick(View v) {
        switch (v.getId()) {
            case R.id.add:
                db = myHelper.getWritableDatabase();
                name = et_name.getText().toString();
                price = et_price.getText().toString();
                number = et_number.getText().toString();
                ContentValues values = new ContentValues();        //创建ContentValues对象
                values.put("name", name);             //将数据添加到ContentValues对象
                values.put("price", price);
                values.put("number", number);
                db.insert("cart", null, values);
                db.close();
                Toast.makeText(this, "信息已添加", Toast.LENGTH_SHORT).show();
                break;
            case R.id.query:
                Log.e("yanwenhua", "123");
                List<CartBean> list = new ArrayList();
                db = myHelper.getWritableDatabase();
                Cursor cursor = db.query("cart", null, null, null, null,
                        null, null);
                if (cursor.getCount() == 0) {
                    Toast.makeText(this, "没有数据", Toast.LENGTH_SHORT).show();
                } else {
                    while (cursor.moveToNext()) {
                        CartBean cartBean = new CartBean();
                        int nameIndex = cursor.getColumnIndex("name");
                        int priceIndex = cursor.getColumnIndex("price");
                        int numberIndex = cursor.getColumnIndex("number");
                        String name = cursor.getString(nameIndex);
                        String price = cursor.getString(priceIndex);
                        String number = cursor.getString(numberIndex);
                        Log.e("yanwenhua", "cursor.getCount();--" + cursor.getCount() + "name-" + name + "  " + price + "  " + number);
                        cartBean.setName(name);
                        cartBean.setPrice(price);
                        cartBean.setNumber(number);
                        list.add(cartBean);
                    }
                    CartAdapter adapter = new CartAdapter(GuanliActivity.this, list);
                    listView.setAdapter(adapter);
                    adapter.notifyDataSetChanged();
                }
                cursor.close();
                db.close();
                break;
            case R.id.update:
                name = et_name.getText().toString();
                price = et_price.getText().toString();
                number = et_number.getText().toString();
                db = myHelper.getWritableDatabase();
                values = new ContentValues();       // 要修改的数据
                values.put("number", number);
                values.put("price", price);
                db.update("cart", values, "name=?",
                        new String[]{name}); // 更新并得到行数
                db.close();
                Toast.makeText(this, "信息已修改", Toast.LENGTH_SHORT).show();
                break;
            case R.id.delete:
                db = myHelper.getWritableDatabase();
                db.delete("cart", "name=?", new String[]{et_name.getText().toString()});
                Toast.makeText(this, "信息已删除", Toast.LENGTH_LONG).show();
                List<CartBean> list2 = new ArrayList();
                CartAdapter adapter = new CartAdapter(GuanliActivity.this, list2);
                adapter.notifyDataSetChanged();
                listView.setAdapter(adapter);
                db.close();
                break;
        }

}
}

2、商品展示

activity_shangpin.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ShangpinActivity">
    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="商品展示"
        android:textSize="55sp"
        android:layout_centerHorizontal="true"/>
    <ListView
        android:id="@+id/lv"
        android:layout_marginTop="15dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/text1"/>

</RelativeLayout>

布局文件list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="15dp">

<ImageView
        android:id="@+id/iv"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_gravity="center"
        android:background="@drawable/baijian" />

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginLeft="15dp"
        android:orientation="vertical">

<TextView
            android:id="@+id/biaoti"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="充电宝"
            android:textSize="25sp" />

<TextView
            android:id="@+id/jiage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="15元"
            android:textSize="25sp" />

<TextView
            android:id="@+id/pingjia"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="电量很足,能使用很久"
            android:textSize="25sp" />

</LinearLayout>

</LinearLayout>

ShangpinActivity.java

package com.example.deal1;

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class ShangpinActivity extends AppCompatActivity {
    private ListView lv;
    private String[] biaoti = {"创意摆件", "实用笔记", "道歉礼物", "美观日历", "创意时钟", "玩偶娃娃", "温馨夜灯", "水杯"};
    private String[] jiage = {"55元", "15元", "65元", "35元", "100元", "220元", "85元", "99元"};
    private String[] pingjia = new String[]{"随处摆放,很美观", "页面平整,写字舒服", "哄女友神器",
            "美观,方便看时间", "很有创意感", "毛茸茸很舒服", "灯光柔和,温暖舒心", "保温效果很好"};
    private int[] icons = {R.drawable.baijian, R.drawable.biji, R.drawable.liwu, R.drawable.rili,
            R.drawable.shizhong, R.drawable.wanou, R.drawable.yedeng, R.drawable.shuibei};

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shangpin);
        lv = findViewById(R.id.lv);
        MyBaseAdapter myBaseAdapter = new MyBaseAdapter();
        lv.setAdapter(myBaseAdapter);

}

class MyBaseAdapter extends BaseAdapter {

@Override
        public int getCount() {
            return biaoti.length;
        }

@Override
        public Object getItem(int position) {
            return biaoti[position];
        }

@Override
        public long getItemId(int position) {
            return position;
        }

@Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = View.inflate(ShangpinActivity.this, R.layout.list_item, null);
            TextView biaoti0 = view.findViewById(R.id.biaoti);
            TextView jiage0 =view. findViewById(R.id.jiage);
            TextView pingjia0 = view.findViewById(R.id.pingjia);
            ImageView iv = view.findViewById(R.id.iv);
            biaoti0.setText(biaoti[position]);
            jiage0.setText(jiage[position]);
            pingjia0.setText(pingjia[position]);
            iv.setBackgroundResource(icons[position]);
            return view;
        }
    }
}

五、个人心得

这个程序作完不难,关键是调试,修改的过程很难。还有一点,一个细心的人作程序可能少走弯路。一般作程序不是从头到尾作完再调试,这样很难调好,因为每编一句都可能出错,这样错误越积越多,最好的方法是每作完一个小段调试一次,一步一步循序渐进地作完,到最后不至于出了很多错误,不知如何寻找,同样少了很多的麻烦。编程多了,自然地经验多了,调程序就不觉得那么难了。

要想编好、快速完成任务,就必须有严谨的科学态度,比如说一个字母,甚至一个标点符号的错误都会导致错误,这种错误在编程中我们经常出现,有时系统能让你很快找出,你能顺利往下进行,但有时它提示的错误信息和标点一点关系都没有,而后你把编的程序从头到尾看了一遍, 结果花了大量的时间, 大大降低了效率。其它的粗心大意错误更是五花八门,调试起来就更加困难了,所以在编程时一定要心细。编程要有耐心,因为编程是件很繁琐的工作,如果没有耐心恐怕是编不下去的,比如有的人,有好几处错误,就放弃了,结果一事无成。

最后一点,就是编程时思路一定要清楚。因为编程本身就是一个严密的逻辑过程,实现每一步的操作需要那些命令,哪些条件都是清清楚楚,明明了了的,来不得半点遗漏。

总的来说,编程是件复杂的脑力劳动,要有科学严谨的科学态度,细心的习惯和耐心才能作好,要做到以上的要求我们还要做许多许多。

在课程设计的过程中,我遇到了很多问题,通过查阅参考书和老师的指导,都得到了解决。这不仅仅锻炼了我分析问题和解决问题的能力,也使我意识到自己对知识的了解程度远了,知识的缺乏也在很多方面。以后我一定会努力提高自己的理论水平,同时尽可能多地读一些科学书籍,提高自己的理论水平和动手实践能力。由于时间的限制,解决这个问题和本文不能被称为完美。在许多地方还有待阐述,修改和完善

原文地址:https://www.cnblogs.com/mengjia0513/p/12006066.html

时间: 2024-10-29 18:58:15

安卓课设的相关文章

安卓课设报告

                                                                                              安卓课程设计报告                                                                                                  记账管理系统                                            

私厨--课设报告

Android应用程序开发 课程设计报告 (2019—2020学年 第Ⅰ学期) 基于Android的家庭菜谱系统 系    别            信息与控制工程 专    业           计算机科学与技术 班    级                1701 姓    名              荣瑞瑞 指导教师                郭 丹 目录 TOC \o "1-2" \h \u 一.摘要 1 二.课设题目 1 三.系统设计 2 四.系统测试 6 五.系统实

漫画app课设

Android移动应用开发 课程设计报告 (2019—2020学年 第Ⅰ学期) 作品主题:漫画app 系    别        信息与控制工程 专    业        计算机科学与技术 班    级          计算机1702 学    号            173230217 姓    名               张宏升 指导教师               郭丹 目录 一.需求分析 1 1.1引言 1 1.1.1编写目的 1 1.1.2项目背景 1 1.2功能需求分析 1

编译原理课设参考

期末到了,忙课设好久了,在编译原理的课设上面走了好多的弯路,也好久没有碰前端的东西了,心感惭愧,那我就把我最近忙的一些东西贡献出来,希望可以帮助到那些感觉这门科目很难的同学,祝大家可以学好每一门学科~ 下面是我们学校的学习要求,我全部已经完成,时间仓促,大家仅供参考.转载请注明出处. 基本内容(成绩范围:“中”.“及格”或“不及格”) (1)扩充赋值运算:+=,-=, *= 和 /= (2)扩充语句(Pascal的FOR语句): FOR <变量>:=<表达式>STEP<表达式

java课设打包操作

最近在交java课设时把东西打包给老师遇到许多奇葩问题, 首先是数据库复制时提示: 这是数据库与SQL server服务没有分离(我用的是SQLserver暂时,对于其他的,我以后会继续尝试)可以进行以下操作 打开sqlserver     找到需要分离的数据库 右键----->任务---->分离 这样再复制粘贴就可以了 然后就是java源文件导出为可运行的jar文件 导出jar 导出复制粘帖时又出现错误提示 操作无法完成 因为文件已在 Java(TM) Platform SE binary

Slimer软工课设日报-2016年6月30日

根据上期预告,今天的主要工作是增加了初始界面和设置界面 初始界面 点击start按钮,若在设置中已成功连接服务器,则会进入账号登录界面,否则弹窗报错 void start() { //开始游戏按钮 if (connected == 0) { MessageBox(NULL,"未连接到服务器,请在设置中输入IP","错误" , MB_OK); } else { form = 1; //账号登录页面 } } start按钮 代码中connected变量当设置页面中ip连

Slimer软工课设日报--第一天

根据之前用户反馈的调整窗口大小后按钮失灵的问题,我设计了如下的解决方案: 由于按钮响应是通过判断是否点击在该按钮相应的xy坐标范围里来判定的,按钮的xy坐标则是通过窗口大小换算的 double changex(int x) { return x*2.0 / WindowWidth - 1; } double changey(int y) { return y*2.0 / WindowHeight - 1; } 换算函数 而原先的游戏窗口大小是固定的,所以当用户改变窗口大小时,按钮还是原来的判定区

难忘课设

随着走出实验室机房的那一刻起,我们的第一个课程设计--初级课程设计就这样结束了.回顾这将近两周的历程,真的是感慨万分,收获颇多,为自己大学第一年的生活,添加上了最为亮彩的一页,也为今后的大学生活,增添了前进的动力. 还记得课设开始的第一天,看着发下来的设计方案与模块,大部分同学都惊呆了,惊奇着我们居然要做这么难的东西,但我还是比较淡定的,因为可以检验自己,锻炼自己.如果你看看身边的大神们,你会发现,他们的眼中只有自信和期待. 随着老师的简单介绍,我们的课设真的开始了,然而很多同学都不知道从何下手

软工课设的成果物

上学期的软件工程课设可以说是对本次毕设的一个准备.下面展示该课设的成果. 首先,必须了解研究生的论文撰写过程(生命周期): 在生成需求分析的时候,我们对老师和同学还进行了调研.结果如下: 对导师的调查结果 以下是学生调查结果的一部分: 数据流图: