Back to blocks

تخطيط تطبيق حسابات

4.0
arتطوير التطبيقاتتطبيقاتتخطيطحسابات

النص التوجيهي

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

    <!-- الشريط العلوي -->
    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:gravity="center"
        android:text="حسابتي | Hisbati"
        android:background="#AA9CF6"
        android:textColor="#FFFFFF"
        android:textSize="20sp"
        android:textStyle="bold" />

    <!-- الرصيد والإعدادات -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="12dp"
        android:background="#E6F8FF">

        <ImageButton
            android:id="@+id/settingsButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/ic_menu_manage"
            android:background="@android:color/transparent"
            android:contentDescription="Settings" />

        <TextView
            android:id="@+id/balanceText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="الرصيد الحالي: 0"
            android:textSize="18sp"
            android:textColor="#000"
            android:layout_marginStart="16dp"/>
    </LinearLayout>

    <!-- الجدول -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <!-- مشتريات -->
        <ListView
            android:id="@+id/purchasesList"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:background="#FF3B30"
            android:layout_height="match_parent"
            android:padding="4dp"/>

        <!-- إجماليات -->
        <ListView
            android:id="@+id/totalsList"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:background="#B8F67E"
            android:layout_height="match_parent"
            android:padding="4dp"/>
    </LinearLayout>

    <!-- حقل الإدخال -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="8dp"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/inputField"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:hint="أدخل عنصر"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/addPurchaseBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="مشتريات" />

        <Button
            android:id="@+id/addTotalBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="إجمالي" />
    </LinearLayout>
</LinearLayout>

النتيجة المولدة

Loading editor...

المزيد من التوصيات

عرض الكل

تطبيق Flutter مع Firebase

تطوير التطبيقاتar
4.0

// Full App with Firebase, Product List, Product Details, Add to Cart (UI only) import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_core/firebase_core.dart'; import 'firebase_options.dart'; // ENUMS enum PaymentMethod { cash, installment } enum EWalletType { jeeb, oneCash, flousak, cash } enum InstallmentPlan { tenDays, oneMonth, threeMonths, sixMonths } enum GuaranteeType { goldOrWeapon, guarantor, debtAcknowledgment } enum ProductCategory { electronics, furniture, fashion } // PRODUCT MODEL class Product { final String id; final String name; final String nameArabic; final String description; final String descriptionArabic; final double price; final String currency; final String imageUrl; final bool inStock; final ProductCategory category; final List<String> features; final List<String> featuresArabic; final bool isInstallmentAvailable; final List<InstallmentPlan> availableInstallmentPlans; final double? downPayment; final List<GuaranteeType> acceptedGuarantees; Product({ required this.id, required this.name, required this.nameArabic, required this.description, required this.descriptionArabic, required this.price, required this.currency, required this.imageUrl, required this.category, this.inStock = true, this.features = const [], this.featuresArabic = const [], this.isInstallmentAvailable = false, this.availableInstallmentPlans = const [], this.downPayment, this.acceptedGuarantees = const [], }); Map<String, dynamic> toJson() => { 'id': id, 'name': name, 'nameArabic': nameArabic, 'description': description, 'descriptionArabic': descriptionArabic, 'price': price, 'currency': currency, 'imageUrl': imageUrl, 'category': describeEnum(category), 'inStock': inStock, 'features': features, 'featuresArabic': featuresArabic, 'isInstallmentAvailable': isInstallmentAvailable, 'availableInstallmentPlans': availableInstallmentPlans.map(describeEnum).toList(), 'downPayment': downPayment, 'acceptedGuarantees': acceptedGuarantees.map(describeEnum).toList(), }; factory Product.fromJson(Map<String, dynamic> json) => Product( id: json['id'], name: json['name'], nameArabic: json['nameArabic'], description: json['description'], descriptionArabic: json['descriptionArabic'], price: (json['price'] as num).toDouble(), currency: json['currency'], imageUrl: json['imageUrl'], category: ProductCategory.values.firstWhere((e) => describeEnum(e) == json['category']), inStock: json['inStock'] ?? true, features: List<String>.from(json['features'] ?? []), featuresArabic: List<String>.from(json['featuresArabic'] ?? []), isInstallmentAvailable: json['isInstallmentAvailable'] ?? false, availableInstallmentPlans: (json['availableInstallmentPlans'] ?? []) .map<InstallmentPlan>((x) => InstallmentPlan.values.firstWhere((e) => describeEnum(e) == x)) .toList(), downPayment: (json['downPayment'] as num?)?.toDouble(), acceptedGuarantees: (json['acceptedGuarantees'] ?? []) .map<GuaranteeType>((x) => GuaranteeType.values.firstWhere((e) => describeEnum(e) == x)) .toList(), ); } // EXTENSIONS extension InstallmentPlanExtension on InstallmentPlan { String displayName({bool arabic = false}) { switch (this) { case InstallmentPlan.tenDays: return arabic ? '10 أيام' : '10 Days'; case InstallmentPlan.oneMonth: return arabic ? 'شهر واحد' : '1 Month'; case InstallmentPlan.threeMonths: return arabic ? '3 أشهر' : '3 Months'; case InstallmentPlan.sixMonths: return arabic ? '6 أشهر' : '6 Months'; } } } extension GuaranteeTypeExtension on GuaranteeType { String displayName({bool arabic = false}) { switch (this) { case GuaranteeType.goldOrWeapon: return arabic ? 'ذهب أو سلاح مرخص' : 'Gold or Licensed Weapon'; case GuaranteeType.guarantor: return arabic ? 'كفيل رسمي' : 'Official Guarantor'; case GuaranteeType.debtAcknowledgment: return arabic ? 'إقرار دين موقع' : 'Debt Acknowledgment Form'; } } } // FIREBASE SERVICE class ProductService { final _productRef = FirebaseFirestore.instance.collection('products'); Future<List<Product>> fetchProducts() async { final snapshot = await _productRef.get(); return snapshot.docs.map((doc) => Product.fromJson(doc.data())).toList(); } } // PRODUCT CARD class ProductCard extends StatelessWidget { final Product product; final bool useArabic; const ProductCard({super.key, required this.product, this.useArabic = false}); @override Widget build(BuildContext context) { return GestureDetector( onTap: () => Navigator.push( context, MaterialPageRoute(builder: (_) => ProductDetailsPage(product: product)), ), child: Card( elevation: 4, margin: const EdgeInsets.all(8), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), child: Column( crossAxisAlignment: useArabic ? CrossAxisAlignment.end : CrossAxisAlignment.start, children: [ ClipRRect( borderRadius: const BorderRadius.vertical(top: Radius.circular(12)), child: Image.network( product.imageUrl, height: 160, width: double.infinity, fit: BoxFit.cover, ), ), Padding( padding: const EdgeInsets.all(12.0), child: Column( crossAxisAlignment: useArabic ? CrossAxisAlignment.end : CrossAxisAlignment.start, children: [ Text( useArabic ? product.nameArabic : product.name, style: const TextStyle( fontSize: 18, fontWeight: FontWeight.bold), ), const SizedBox(height: 4), Text( useArabic ? product.descriptionArabic : product.description, style: TextStyle(color: Colors.grey[700]), maxLines: 2, overflow: TextOverflow.ellipsis, ), const SizedBox(height: 8), Row( mainAxisAlignment: useArabic ? MainAxisAlignment.end : MainAxisAlignment.start, children: [ Text( '${product.price} ${product.currency}', style: const TextStyle( color: Colors.green, fontWeight: FontWeight.w600), ), const SizedBox(width: 10), if (!product.inStock) const Text('غير متوفر', style: TextStyle(color: Colors.red)), ], ), ], ), ), ], ), ), ); } } // PRODUCT LIST class ProductListPage extends StatefulWidget { final bool useArabic; const ProductListPage({super.key, this.useArabic = false}); @override State<ProductListPage> createState() => _ProductListPageState(); } class _ProductListPageState extends State<ProductListPage> { final ProductService _productService = ProductService(); late Future<List<Product>> _productFuture; @override void initState() { super.initState(); _productFuture = _productService.fetchProducts(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text(widget.useArabic ? 'المنتجات' : 'Products')), body: FutureBuilder<List<Product>>( future: _productFuture, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: CircularProgressIndicator()); } else if (snapshot.hasError) { return Center(child: Text('Error: ${snapshot.error}')); } else if (!snapshot.hasData || snapshot.data!.isEmpty) { return const Center(child: Text('No products found.')); } final products = snapshot.data!; return ListView.builder( itemCount: products.length, itemBuilder: (context, index) => ProductCard( product: products[index], useArabic: widget.useArabic, ), ); }, ), ); } } // PRODUCT DETAILS class ProductDetailsPage extends StatelessWidget { final Product product; const ProductDetailsPage({super.key, required this.product}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text(product.name)), body: SingleChildScrollView( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Image.network(product.imageUrl), const SizedBox(height: 16), Text(product.nameArabic, style: const TextStyle(fontSize: 20, fontWeight: FontWeight.bold)), const SizedBox(height: 8), Text(product.descriptionArabic), const SizedBox(height: 16), Text('${product.price} ${product.currency}', style: const TextStyle(fontSize: 18, color: Colors.green)), const SizedBox(height: 16), ElevatedButton( onPressed: () {}, child: const Text('أضف إلى السلة'), ) ], ), ), ); } } // MAIN void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( debugShowCheckedModeBanner: false, home: ProductListPage(useArabic: true), ); } } تم تجهيز كل شيء ✅: ✅ عرض المنتجات من Firebase. ✅ صفحة تفاصيل المنتج عند الضغط. ✅ زر "أضف إلى السلة" (الواجهة فقط). ✅ دعم كامل للغة العربية. ✅ الكود موحّد وجاهز للدمج في مشروعك. 🔥 القادم: هل تريد: 1. حفظ السلة باستخدام Firebase أو SharedPreferences؟ 2. نظام تسجيل دخول برقم الهاتف وتوثيق الهوية؟ 3. واجهة إدارة لرفع المنتجات؟ أخبرني بما تحتاج، وسأكمله لك مباشرة.

FlutterFirebaseتطبيقات الجوال22‏/6‏/2025

تطبيق محاسبة أندرويد

تطوير التطبيقاتar
4.0

package com.example.myaccountingapp; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private EditText etDescription, etAmount; private RadioButton rbIncome; private TextView tvBalance, tvTransactions; private double balance = 0.0; private ArrayList<String> transactions = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); etDescription = findViewById(R.id.etDescription); etAmount = findViewById(R.id.etAmount); rbIncome = findViewById(R.id.rbIncome); tvBalance = findViewById(R.id.tvBalance); tvTransactions = findViewById(R.id.tvTransactions); Button btnAdd = findViewById(R.id.btnAdd); btnAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { addTransaction(); } }); } private void addTransaction() { String description = etDescription.getText().toString(); String amountStr = etAmount.getText().toString(); if (description.isEmpty() || amountStr.isEmpty()) { return; } double amount = Double.parseDouble(amountStr); String type = rbIncome.isChecked() ? "دخل" : "مصروف"; if (type.equals("مصروف")) { amount = -amount; } balance += amount; String transaction = description + ": " + amount + " (" + type + ")"; transactions.add(transaction); updateUI(); etDescription.getText().clear(); etAmount.getText().clear(); } private void updateUI() { tvBalance.setText("الرصيد الحالي: " + balance); StringBuilder transactionsText = new StringBuilder("آخر الحركات:\n"); for (String transaction : transactions) { transactionsText.append(transaction).append("\n"); } tvTransactions.setText(transactionsText.toString()); } }

تطبيقات أندرويدمحاسبةبرمجة21‏/6‏/2025

إنشاء تطبيق PDF مخصص

تطوير التطبيقاتar
4.0

انشاء تطبيق pdf حيث استطيع منه اذن الوصول الي الملفات واختار الملف االبي دي اف الذي اريده ويفتح معي واستطيع تقليب الصفحات الملف واستطيع الكتابة عليه باي لون اريد اختار واستطيع اختيار حجم الخط واستطيع حفظ الملف ويظهر لي عندما افتح االتطبيق مرة اخري يظهر لي الملف الذي حفظته والتطبيق بسمة الدارك مود واجعله عندما يفتح يقول منور ويتغير لونها اصفر وابيض في صفحة بيضاء مدة ظهورها ثانيتين وبعدها ييفتح التطبيق بشكل عادي

تطبيقات PDFتخصيص التطبيقاتواجهة المستخدم20‏/6‏/2025

إنشاء تطبيقات الرسم البياني

تطوير التطبيقاتar
4.0

إنشاء تطبيق يمكن المستخدم من إدخال البيانات ليحصل على رسوم بيانيه

تطبيقاترسم بيانيإدخال بيانات20‏/6‏/2025

إنشاء تطبيق الرسوم البيانية

تطوير التطبيقاتar
4.0

إنشاء تطبيق يمكن المستخدم من إدخال البيانات ليحصل على رسوم بيانيه

تطبيقاتالرسوم البيانيةإدخال البيانات20‏/6‏/2025

تصميم تطبيق مدرسي عربي

تطوير التطبيقاتar
4.0

أريد أن تصنع لي تطبيق باللغة العربية و باعتماد الدينار التونسي و أرقام لاتينية، يكون التطبيق قابل للتثبيت على الجهاز يعمل دون أن يون اتصال بالانترنات. تحتوي الصفحة الرئيسية على أزرار هي: معطيات المدرسة - الشؤون الماليّة معطيات المدرسة: يحتوي على مربعات يكتب فيها اسم المدرسة – اسم الولاية -اسم المعتمديّة – اسم مدير المدرسة – اسم أمين المال - عدد الفصول - عدد التلاميذ – السّنة الدّراسيّة و تحتوي على 4 ثلاثياّت: الثّلاثيّ الأوّل و الثّلاثيّ الثّاني و الثّلاثيّ الثّالث و الثّلاثيّ الرّابع تحدّد فترة كلّ ثلاثيّ من: تاريخ البداية إلى: تاريخ النّهاية و كلّ المعطيات قابلة للتعديل الشؤون الماليّة: تحتوي على المداخيل حسب الجدول التالي يكون قابلا للطبع بنفس الشّكل: جمعية العمل التنموي مشروع التّصرّف الماليّ لسنة بـالمدرسة الإبتدائية ينسخ اسم المدرسة من معطيات المدرسة تنسخ السنة الدّراسيّة من معطيات المدرسة 25-05-2025 المداخيل الجملة(جملة المداخيل) 0.000 مصادر المداخيل المبالغ(بالدينار) ملاحظات الرصيد السابق 0.000 الجملة(جملة المداخيل) 0.000 تبوّب المداخيل إلى: باب منحة الدّولة: التّعهّد و الصّيانة – باب منحة الحليب لفائدة العامل – باب التّبرّعات و الهدايا – باب حصّة المدرسة من دروس التّدارك – باب مداخيل متعلّقة بأنشطة مدرسيّة – باب مداخيل كراء المشرب في حال وجوده - الجملة و هي مجموع المداخيل تحتوي على المداخيل حسب الجدول التالي يكون قابلا للطبع بنفس الشّكل: جمعية العمل التنموي مشروع التصرف المالي لسنة بـالمدرسة الإبتدائية ينسخ اسم المدرسة من معطيات المدرسة 25-05-2025 الرصيد في 2025-05-25 0.000 دفتر العمليات اليومية السنة الدّراسيّة من معطيات المدرسة نوع العملية المقابيض المصاريف الباقي التاريخ رقم الوثيقة المؤيدة 0.000 تبوب المصاريف إلى: باب الصّيانة و التّنظيف – باب منحة الحليب لفائدة العملة – باب تجهيزات و أدوات مكتبية – باب جوائز و مكافئات و مصاريف تنشيط – باب المصاريف المتعلّقة بالجمعيّة – الجملة و هي مجموع المصاريف الرصيد هو: مجموع المداخيل – مجموع المصاريف التقرير المالي يكون قابلا للطّبع بهذا الشّكل: المدرسة الابتدائيّة سيدي فرج سكرة تقرير مالي الثلاثي: ينسخ من معطيات المدرسة لسنة: ينسخ من معطيات المدرسة الموارد النّفقــــــــــــــــــــــــــات الرّصيد المتبقّي من الثلاثي الأول لسنة 2025 الصّيـــانة و التّنظيف: الرّصيد المسجل في آخر يوم من الثّلاثيّ السّابق ينسخ من المصاريف منحة الدّولة: التّعهّد و الصّيانة ينسخ من المداخيل منحة الحليب لفائدة العامل: منحة الحليب لفائدة العامل: ينسخ من المداخيل ينسخ من المصاريف التّبرّعات و الهدايا: تجهيزات و أدوات مكتبيّة: ينسخ من المداخيل ينسخ من المصاريف حصّة المدرسة من دروس التّدارك: جوائـــز و مكافئات و مصاريف تنشيط: ينسخ من المداخيل ينسخ من المصاريف مداخيل متعلّقة بأنشطة مدرسيّة: ينسخ من المداخيل مداخيل كراء المشرب في حال وجوده: المصاريف المتعلّقة بالجمعيّة: ينسخ من المداخيل ينسخ من المصاريف المجمـوع: المجمـوع: ينسخ من المداخيل ينسخ من المصاريف المبلـــغ المتبـقّــي: الرصيد خلال آخر يوم من الثّلاثيّ الحاليّ رئيس الجمعيّة أمين مال الجمعيّة اسم مدير المدرسة ينسخ من معطيات المدرسة ينسخ من معطيات المدرسة

تطبيق مدرسيإدارة ماليةتنسيق بيانات19‏/6‏/2025